Zum Inhalt springen

GMENU_FOLDOUT klappt nicht dynamisch aus

Erstellt am 20. November 2007 · 3 Antworten · letzte Antwort am 29. November 2007

Tags: JavaScript & AJAX, Frage

lucky23 ·

hi,

folgendes problem. Hab ein GMENU_FOLDOUT in die Seite eingebunden. Der TS-code ist aus der t3 documentation.
Funktioniert soweit auch ganz gut, menü wird angezeigt und passt soweit alles.

Das Problem liegt darin, das das menü nach einem klick nicht dynamisch aufklappt, sondern erst nach neuladen der seite aufklappt.
Der Fehler kommt daher, das in den erzeugten links das onclick ereignis fehlt.
normalerweise müsste in den oberpunkten sowas stehen

onclick="GF_menu(0); return false;"

jetzt ist die frage, wie ich dieses onclick ereignis in die links reinbekomm, bzw. warum dieses nicht ausgegeben wird.

auszug aus der gmenu_foldout.php

/**
	 * Processing before the links are created.
	 * Basically this is setting an onclick handler for clicking the menu item.
	 *
	 * @param	integer		Pointer to $this->menuArr[$key] where the current menu element record is found
	 * @return	void
	 */
	function extProc_beforeLinking($key)	{
		$this->I['addATagParams']='';
		$this->WMsubmenu = $this->subMenu($this->I['uid'], $this->WMsubmenuObjSuffixes[$key]['sOSuffix']);
		if (trim($this->WMsubmenu))	{
			$this->I['addATagParams']=' onclick="GF_menu('.$key.');'.($this->mconf['dontLinkIfSubmenu'] ? ' return false;' : '').'"';
			if ($this->isActive($this->I['uid'], $this->getMPvar($key)) && $this->mconf['displayActiveOnLoad'])	{	// orig: && $this->WMisSub, changed 210901
				$this->WM_activeOnLoad='GF_menu('.$key.');';
			}
		}
	}

mein TS

## GMENU_FOLDOUT
includeLibs.gmenu_foldout = media/scripts/gmenu_foldout.php

temp.foldoutMenu = HMENU
temp.foldoutMenu.1 = GMENU_FOLDOUT
temp.foldoutMenu.1.expAll=1
temp.foldoutMenu.1.NO {
  wrap = | <br />
  XY = 150,20
  backColor = silver

  10 = TEXT
  10.text.field = title
  10.fontSize = 12
  10.fontColor = Blue
  10.offset = 2,10
}

temp.foldoutMenu.1.RO  < temp.foldoutMenu.1.NO
temp.foldoutMenu.1.RO = 1
temp.foldoutMenu.1.RO {
  10.fontColor = red
}

temp.foldoutMenu.2 = TMENU
temp.foldoutMenu.2.NO {
  linkWrap = <nobr><font face="verdana" size="1" color="black"><b>|</b></font></nobr><br />
  stdWrap.case = upper
}

temp.foldoutMenu.1 {
  dontLinkIfSubmenu = 1
  displayActiveOnLoad = 1
  stayFolded=1
  foldSpeed = 6
  subMenuOffset = 10,18
  menuOffset = 100,20
  menuBackColor = silver
  bottomBackColor = silver
  menuWidth = 170

  arrowNO = media/bullets/arrow_no.gif
  arrowACT = media/bullets/arrow_act.gif
  arrowImgParams = hspace=4 align=top

}

lib.subnav >
lib.subnav < .temp.foldoutMenu
lucky23 ·

hi,

ich habe mal den ordner media/scripts/ angelegt und dort die 4 dateien reinkopiert. Scheinbar wenn der ordner nicht existiert, dann wird automatisch der ordern typo3/sysext/cms/tslib/media/scripts/ genommen, und dort liegen die files ja auch drin.

wie gesagt, das menü funktioniert soweit korrekt, nur dieses onclick event wird nicht in den link eingefügt.

hatte mal testweise in den additionalParams vom GMENU das ereignis reingeschrieben
onclick="GF_menu(0); return false;"

dann funktionierte das menü richtig, allerdings klappte dann eben immer nur das erste menü aus.

lucky23 ·

hi,

hab das problem gelöst...

hier ein teil der veränderten gmenu_foldout.php

	/**
	 * Processing before the links are created.
	 * Basically this is setting an onclick handler for clicking the menu item.
	 *
	 * @param	integer		Pointer to $this->menuArr[$key] where the current menu element record is found
	 * @return	void
	 */
	function extProc_beforeLinking($key)	{
		$this->I['addATagParams']='';
		$this->WMsubmenu = $this->subMenu($this->I['uid'], $this->WMsubmenuObjSuffixes[$key]['sOSuffix']);
		if (trim($this->WMsubmenu))	{
			$this->I['addATagParams']=' onclick="GF_menu('.$key.');'.($this->mconf['dontLinkIfSubmenu'] ? ' return false;' : '').'"';
			if ($this->isActive($this->I['uid'], $this->getMPvar($key)) && $this->mconf['displayActiveOnLoad'])	{	// orig: && $this->WMisSub, changed 210901
				$this->WM_activeOnLoad='GF_menu('.$key.');';
			}
		}
		
		/* =========== USER CHANGE ========================*/
		$this->I[linkHREF]["onClick"] = 'GF_menu('.$key.'); return false;';
		/* =========== USER CHANGE ========================*/
	}

das problem war scheinbar das die variable $this->I['addATagParams'] nicht ausgewertet wurde. Es wurde zwar das onclick ereignis korrekt eingetragen, aber später nicht ins menü übernommen.

woher das kommt, weis ich auch net

meine Typo version 4.1.2