Zum Inhalt springen

cHash im HMENU über userFunc

Erstellt am 6. Juli 2007 · 2 Antworten · letzte Antwort am 30. August 2007

Tags: Frage

dagfa ·

Hi,

ich bin zurzeit an einer Extension beschäftigt. Die ein HMENU mit eigenen Menüpunkten ohne bezug auf die Seitenstruktur erzeugt.
Mit der Möglichkeit eine Funktion einzubinden, erzeuge ich das Menü.
Es hängt eine zusätzliche Variable an die URL, welche die ID des aktiven Menüpunktes steuert. Ich benutze es für ein Tabmenü.

Jetzt hab ich aber das Problem, das die einzelnen Unterseiten, welche ja keine Unterseiten sind, nicht so einfach einzelnd gecached werden können.

Lösung dafür wäre der cHash. Soweit ich das richtig verstanden habe, chached TYPO3 auch Seiten die unterschiedliche Parameter haben. Dafür muss man nur den cHash Parameter anhängen und diesen richtig berechnen.

In meinen Skript kann ich ohne Probleme den cHash berechnen lassen, nur bekomm ich das HMENU nicht dazu, das an die Parameterliste anzuhängen.

Die id für den aktiven Menüpunkt, hänge ich beim Menuarray, welches ich dem HMENU übergeben mit "_ADD_GETVARS" an. Nur scheint dieser Parameter den cHashparameter zu entfernen. Wenn ich ihn z.B. ccHash nenne, wird er mit angehangen.

Was kann man machen, das der cHash-Paramter auch über das HMENU mit angegeben wird?

Oder hab ich die Funktionsweise vom cHash falsch verstanden und das ganze läuft automatisiert?

dagfa ·

So ich habe es nun doch selbst gelöst, die Idee kam mir erst vor ein paar Minuten und ich möchte es anderen nicht vorenthalten. Da mir leider keiner Helfen konnte.

Im Prinzip ist es ganz einfach, man hat in der Funktion, die das Userdefinierte Array zurückliefern soll, zugriff auf die "pi" Funktionen. Vielicht liegt es aber auch daran, das meine Funktion in einer FrontendPlugin-Extesion liegt.

Im Menuarray nutzt ich statt 'uid', nun das Feld '_OVERRIDE_HREF'.
Wo ich komplette URLS angeben kann. Dort Schreibe ich mit Hilfe der Funktion pi_linkTP_keepPIvars_url eine vollständige URL die die PiVars und den passenden cHash automatisch enthält. Der 2. Parameter steuert das Caching, "1" bedeutet das es einen cHash generieren soll.

Hier mal das Menuarray:

array_push($menu,array(
 'title' => $v,
 //auf sich selbst zeigen
 //'uid' => $GLOBALS["TSFE"]->id,  
 //'_ADD_GETVARS' => '&'.$this->prefixId.'[tabid]='.$i,
 '_OVERRIDE_HREF' => $this->pi_linkTP_keepPIvars_url($this->piVars,1,0,$GLOBALS["TSFE"]->id),
 //wenn die orginaltabid, die gleiche ist
 'ITEM_STATE' => ($temp!=$i)?'NO':'CUR', 
)
);

So ich hoff, ich konnte damit anderen weiterhelfen.

cya

mitchiru ·

super lösung, danke, ich darf noch anmerken, dass es zusätzlich entscheidend ist:

  • Das HMENU als COA_INT zu setzen, damit hier auch dynamisches passiert

  • Die userfunction in ein plugin (pi_ zu setzen, damit die tslib_pibase mitgeladen wird)

productlistsubmenu = COA_INT
productlistsubmenu {
	20 = HMENU
	20 {
		#füge die kategorie navigation aus dem oxid shop hinzu
		special = userfunction
		special.userFunc = tx_oxid_pi1->getOxidSubmenu
...