Zum Inhalt springen

Fallunterscheidung beim Menüaufbau

Erstellt am 17. September 2002 · 5 Antworten · letzte Antwort am 17. September 2002

Tags: Frage

Sourcerer ·

Hallo an alle!

Heute habe ich wieder ein schwieriges Problem, das es zu lösen gilt:

Vereinfacht beschrieben möchte ich, dass sich zwei meiner Menüobjekte unterschiedlich verhalten, je nachdem ob sie auf einer Seite angelangt sind, in der es weitere Unterseiten mehr gibt oder nicht.

Im speziellen sieht das so aus:
Meine 1. Navigationselement ist ein Menü, dass immer ausschließlich Unterpunkte der aktuellen Seite anzeigt.

Wenn man auf eine Seite angekommen ist, in der es keine Unterpunkte mehr gibt, dann ist das Menü im Moment leer. Ich möchte, dass sich das Menü dann so verhält, als wäre es eine Ebene höher. Das heißt, das Menü ändert sich nicht, wenn man von der vorletzen Ebene in die letzte wechselt.

Das zweite Menüelement ist eine Verlaufsfunktion (Brotkümmelfunktion), bei der im Grunde genommen das gleiche gilt.

Ach ja, ich möchte nicht für jede Seite auf der letzten Ebene ein eigenes Template spendieren, da es sehr viele sein werden.

Im Grunde genommen brauche ich einen riesigen IF-Block: "Wenn Seite ohne Unterseiten, dann ... ansonsten ...".

Wie kann man das mit Typo erreichen?

Gruß,
Simon

Blacky ·

schau mal im TSRef (3.3.0), Seite 117, unter IFSUB nach. Mit dieser Eigenschaft kannst Du die Menüpunkte kofigurieren, die (keine) Unterseiten haben. Vielleicht brauchst Du auch einen neuen Menütyp (Seite 90, special / userdefined).
hth
Gruß
Andreas Schwarzkopf
http://www.meinsystem.de

Sourcerer ·

Hmm, IFSUB ist doch nur für einzelne Menüpunkte, die keine Unterseiten haben. Ich brauche aber eine Funktion, die ein komplett anderes Menü anzeigt, wenn es keine Unterpunkte gibt. Damit kann ich also mein Problem nicht abdecken.

Innerhalb von irgendwelchen Special-Menüs werden auch keine Fallunterscheidungen gemacht (rootline, directory, updated).

Bleibt nur noch userdefined, aber da habe ich auch keine Ahnung wie man die Fallunterscheidung macht.

Mein Problem anders ausgedrückt: Ich brauche ein Template, dass für alle Punkte ohne Unterpunkte gilt (Für alle "Blätter" in meiner Baumstruktur). Bei allen anderen soll ein anderes Template gelten.

Gruß,
Simon

[ Diese Nachricht wurde geändert von: Sourcerer am 2002-09-17 12:48 ]

Blacky ·

verstanden, auf die Schnelle kann ich Dir da keinen Rat geben.

Alternativvorschlag: je nachdem, ob die Konzeption deiner Site es erlaubt, könntest Du evtl. die Seitenstruktur ändern bzw. festlegen und für die einzelnen Menüebenen abweichende Templatedefinitionen machen:

...
[treeLevel = 0]
Dein Code ...
[treeLevel = 1]
Dein Code ...
[treeLevel = 2]
Dein Code ...
[global]

Wenn Du hier zum Beispiel festlegst, dass es keine weiteren Ebenen geben soll, als die drei, dann hat die letzte Ebene grundsätzlich keine Unterseiten und da kannst Du dann abweichenden Code schreiben.

Wenn das nicht in Frage kommt,
schicke mir eine genaue Beschreibung per Mail. Vielleicht kann ich Dir helfen.
Gruß
Andreas Schwarzkopf
http://www.meinsystem.de

Sourcerer ·

Der Vorschlag ist im meinem Fall leider nicht praktikabel, da nicht festgelegt werden kann, in welcher Ebene ein Zweig endet.

Der Ansatz der Fallunterscheidung ist aber sicherlich der richtige Weg, nur die Bedingung muss verfeinert werden. Gibt es denn keine Variable, die mir sagt, ob oder wieviele Unterpunkte es gibt?

Was für eine genaue Beschreibung wird den benötigt? Ist das Problem nicht ausreichend beschrieben oder fehlt TypoScript, oder sonst irgend etwas?

Gruß,
Simon

Blacky ·

Du kannst zwar prüfen ob das Menü auf irgendeiner Ebene leer ist mit if.isEmpty oder so etwas, aber das bringt Dich nicht weiter, weil Du dann nur dieses Menü ändern kannst.
So eine Menü-Variable gibt es nicht. Die kannst Du aber selbst (vielleicht) mit PHP-Code machen. TSRef-Beispiel, Seite 41:
userFunc:
Syntax:
[userFunc = user_match(checkLocalIP)]
Comparison:
This call the function “user_match” with the first parameter “checkLocalIP”. You write that function. You decide
what it checks. Function result is evaluated as true/false.
Ecample:
Put this function in your localconf.php file:
function user_match($cmd) {
switch($cmd) {
case "checkLocalIP":
if (strstr(getenv("REMOTE_ADDR"),"192.168")) {
return true;
}
break;
case "checkSomethingElse":
// ....
break;
}
}
This condition will return true if the remote address contains “192.168” - which is what your function finds out.
[userFunc = user_match(checkLocalIP)]

Mache eine Datenbankabfrage, wieviele Unterseiten es bei der aktuellen Seite gibt, wenn 0, dann gibt die Funktion false
zurück, wenn >0, dann true usw...

Ist nur so eine Idee, jedenfalls ist es nicht simpel, vielleicht muss man das auch ganz anders machen. Wenn es Dir nicht weiterhilft, poste deine Frage in die Mailingliste auf http://www.typo3.com, wenn es auch nicht hilft, kann ich es vielleicht lösen ($$$).
Sorry
Andreas Schwarzkopf
http://www.meinsystem.de