Zum Inhalt springen

Festgelegte Menüelemente nicht als Link darstellen

Erstellt am 20. Dezember 2006 · 1 Antwort · letzte Antwort am 24. Dezember 2006

Tags: Frage

crusher ·

Hi,

ich habe auf meiner aktuellen Seite eine Struktur ähnlich der Folgenden:

rootlevel
 |
 |--mypage
     |
     |--p1
     |
     |--p2
     |  |
     |  |--p21
     |  |
     |  |--p22
     |
     |--p3
        |
        |--p31
        |
        |--p32

Für diese Struktur habe ich ein Text-Menü erstellt, welches alle Elemente in den zwei Ebenen unterhalb von 'mypage' ständig (mittels expAll) anzeigt.

Ich möchte nun speziell ausgewählte Elemente (hier: p2, nicht aber p3), die ein Untermenü haben, z.B. mittels doNotLinkIt als reinen Text ohne a-Attribut darstellen.

Ausprobiert habe ich bereits die Seiten als spacer zu definieren und den SPC-Status anzupassen, doch dann werden die Elemente der zweiten Ebene nicht angezeigt.
Weiterhin habe ich versucht über eine Condition den oben angesprochenen Wert zu setzen, doch dies gilt immer für alle Elemente ener Ebene, wenn die Bedingung erfüllt ist. Auch ist es mir nicht möglich die ElementId des TMENUITEMs zu erhalten.

Ideal wäre es eine excludeList zu haben, in der ich alle UIDs eintragen kann, die ohne a-Attribut dargestellt werden sollen.

Hat jemand eine Idee, wie man diese Aufgabe lösen könnte?

P.S.: Habe einige Probleme mit Conditions allgemein, da selbst die Standartbeispiele aus der Referenz bei mir nicht funktionieren. Gibt es Parameter, die in PHP oder TYPO3 gesetzt sein müssen?

crusher ·

Habe endlich eine sehr praktikable Lösung gefunden. Hierzu ist die Datei 'typo3/sysext/cms/class.tslib_menu.php' zu editieren um einen weiteren TS-Befehl einzufügen. Verändert wird die Funktion 'extProc_afterLinking' der Klasse 'tslib_tmenu' (etwa auf Zeile 1785).

Die neue Funktion sieht folgendermaßen aus (die letzten Zeilen wurden für das Forum gekürzt dargestellt):

function extProc_afterLinking($key)  {
  // Add part to the accumulated result + fetch submenus

  if (!$this->I['val']['spcSub']) {$this->I['val']['spcSub']=0;}
  if (!$this->I['spacer'] || $this->I['val']['spcSub']=1)  {
    this->I['theItem'].=$this->subMenu($this->I['uid'] ...
  }
  $this->WMresult.=$this->I['val']['wrapItemAndSub'] ...
}

Erzeugt wird ein neuer TS-Befehl 'spcSub', mit dem sich in einem Textmenü nicht gelinkte Einträge mit Untermenüs erzeugen lassen. Dies ermöglicht eine viel nettere Ansicht von z.B. Menüabschnitten.
Um die Auswirkungen zu sehen ist im Seiten-Template ein TMENU unter Verwendung von 'expAll = 1', 'spcSub=1' und 'SPC=1' zu verwenden. Die Menüabschnitte sind einfach als normale Seiten-Bäume im Backend zu erstellen, wobei der 'Titel des Abschnitts' (oberste Seite des Teilbaums) als 'Spacer' zu deklarieren ist.

Ein mögliches Menü könnte aus dem folgenden Skript erzeugt werden (Aussehen ist per CSS anzupassen):

...
NAVIGATION = HMENU
NAVIGATION.special = directory
NAVIGATION.special.value = XXX (Menü-Einstiegsseite)
NAVIGATION.entryLevel = XXX (Menü-Einstiegslevel)
  
NAVIGATION.1 = TMENU
NAVIGATION.1 {
  expAll = 1
  noBlur = 1
  spcSub = 1
  wrap = <ul>|</ul>
  NO = 1
  NO.wrapItemAndSub = <li>|</li>
  SPC = 1
  SPC < .NO
}    

NAVIGATION.2 < .NAVIGATION.1

Hoffe, dass irgend jemand diese Idee nützlich findet, ist auf jeden Fall hilfreich bei statischen Menüs mit wenig Stufen.