Zum Inhalt springen

Mega-Menü und Sitemap-Menü

Erstellt am 15. Januar 2015 · 6 Antworten · letzte Antwort am 21. Januar 2015

Tags: TYPO3 6.x, Frage

wildtrix ·

Hallo Leute,

ich benötige als Typo3 Neuling etwas hilfe.
Anbei optischer Aufbau des Projekts.

Die Topleiste hat ein funktinierenden Mega-Menu (aktuell Stufe 1 bis 6 Submenus).
Zusätzlich möchte ich eine funktionierende Seitennavigation die mir ggf. weitere Stufen ab einer bestimmen Seite ermöglicht(beispiel bei Stufe 4 vom Mega-Menu mit Stufen 1 bis 4 im Seitenmenü).

Mein Typoscript-Code der Mainnavigation sieht wie folgt aus:

lib.mainnav = COA
lib.mainnav {
  wrap = <nav><ul id="main-menu" class="topmenu">|</ul></nav>
  
  20 = COA
  20 {
  
    10 = HMENU
    10 {
      entryLevel = 0
    
      1 = TMENU
      1{
        expAll = 1
     
        NO = 1
        NO {
          wrapItemAndSub = <li>|</li>
        }
      
        ACT = 1
        ACT {
          wrapItemAndSub = <li class="active">|</li>
        }
      }
      
      2 = TMENU
      2 < .1
      2.wrap = <ul>|</ul>
  
      3 = TMENU
      3 < .2
 
      4 = TMENU
      4 < .3
      
       
      5 = TMENU
      5 < .4
      
       
      6 = TMENU
      6 < .5
    }
  }  
}

leider habe ich es nicht hinbekommen und verzweifle etwas.
Über Sitemap kann ich zwar ab einen bestimmten Punkt die Unterseiten darstellen, aber es nimmt nicht das Layoutdaten mit!? Das sieht nicht wirklich schön aus!

Bitte um Hilfe!

Gruß
Wildi

Mega-Menu-und-erweiterte-Seitennavigation.png

wildtrix ·

Hallo zusammen,

bin etwas weitergekommen, der TypoScript sieht nun so aus.

lib.mainnav = COA
lib.mainnav {
  wrap = <nav><ul id="main-menu" class="topmenu">|</ul></nav>
  
  20 = COA
  20 {
  
    10 = HMENU
    10 {
      entryLevel = 0
    
      1 = TMENU
      1{
        expAll = 1
     
        NO = 1
        NO {
          wrapItemAndSub = <li>|</li>
        }
      
        ACT = 1
        ACT {
          wrapItemAndSub = <li class="active">|</li>
        }
      }
      
      2 = TMENU
      2 < .1
      2.wrap = <ul>|</ul>
  
      3 = TMENU
      3 < .2
 
      4 = TMENU
      4 < .3
      
       
      5 = TMENU
      5 < .4
      
       
      6 = TMENU
      6 < .5
    }
  }  
}



lib.subnav = COA
lib.subnav {
  wrap = <nav><ul id="sidebar" class="sidebar">|</ul></nav>
  
  20 = COA
  20 {
  
    10 = HMENU
    10 {
      entryLevel = 2
    
      1 = TMENU
      1{
        expAll = 1
     
        NO = 1
        NO {
          wrapItemAndSub = <li>|</li>
        }
      
        ACT = 1
        ACT {
          wrapItemAndSub = <li class="active">|</li>
        }
      }
      
      2 = TMENU
      2 < .1
      2.wrap = <ul>|</ul>
  
      3 = TMENU
      3 < .2
 
      4 = TMENU
      4 < .3
      
       
      5 = TMENU
      5 < .4
      
       
      6 = TMENU
      6 < .5
    }
  }  
}

das funktioniert auch recht gut, aber was mache ich wenn ich unterschiedliche "entryLevel" haben sollte.

Bitte weiterhin um Unterstützung.

Gruß
Wildi

PS an lee123: habe den Tip nicht verstanden, bitte um Erklärung. Danke.

Wool ·

Stichwort: CONDITIONS
( siehe: https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Conditions/Index.html )

lib.subnav {
  ...snip...
}
# bspw. wenn der TreeLevel > 5 ist dann erstelle das Submenü erst ab Level 3
[treeLevel > 5]
  lib.subnav.20.10.entryLevel = 3
[global]

Du kannst es auch per PIDinRootline machen statt mit treeLevel und dann per special = directory und special.value = id der Startseite des Submenüs.

ACHTUNG:
Conditions dürfen nicht innerhalb von { } stehen !!! aber innerhalb einer Condition dürfen { } enthalten sein.

wildtrix ·

Hallo,

der treeLevel funktioniert gleich wie der entryLevel (Zeile 59). besteht den keine Möglichkeit, unterschiedliche entryLevels für das Submenü zu erstellen?

Gruß
Wildi

Wool ·

Ich denke wir reden aneinander vorbei...

Der Level (egal ob entry oder tree) bezeichnet die Ebene im Seitenbaum.
Für das Menü bedeutet das, dass das Menü ab diesem Level begonnen wird.
Für die Condition bedeutet das: "Wenn die Aussage zutrifft mache Folgendes..."

Dein Beispiel: "bei Stufe 4 vom Mega-Menu mit Stufen 1 bis 4 im Seitenmenü" ist evtl. etwas unverständlich. Ich lese daraus, dass Du im Hauptmenü (Dein Mega-Menü) eine Unterseite auswählst, und im Sub-Menü dann die Oberpunkte bis zur gewählten Seite angezeigt haben möchtest.

Dazu ist evtl. ein "Rootline" ( auch "Klickpfad" oder "Breadcrumb" ) Menü sinnvoller, und das Untermenü der aktuellen Seite (wenn vorhanden) kannst Du dann mit einem normalen tMenü anhängen.

wildtrix ·

Hallo Wool und andere Helfer,

vielen Dank vorab, dass du die Geduld hast und mich unterstützt.
Zum Vorhaben:
Mein Hauptmenu soll bis 5 Levels haben. sobald mit der Maus drüber gefahren wird, werden auch die einzelnen Submenüpunkte angezeigt. Siehe hierzu Vergleich http://www.smartmenus.org/ oder Hauptmenübeispiel.jpeg.

Bei bestimmten Unterseiten die ich dann über das Haptmenü erreicht habe, will ich eine zusätzliche Seitennavigation ansprechen (Seitenmenübeispiel.jpeg) die mir weitere Unterlevels (levelanzahl erstmal nicht begrenzt) zur Verfügung stellt. Der entryLevel kann und soll aber auch unterschiedlich sein.

Beispiele
1. Auswahl aus irgendeinem Hauptmenüpunkt Level 2 öffnet Seitennavigation mit weiteren 5 Levels (Beispiel für Seite Projects = Level 2 aus "About" = Level 0 und Unterpunkt "The Company" = Level 1)
2. Auswahl aus irgendeinem Hauptmenüpunkt Level 1 öffnet Seitennavigation mit weiteren 8 Levels (Beispiel für Seite Themes aus "About" Level 0 )
3. Auswahl aus irgendeinem Hauptmenüpunkt Level 5 öffnet keine Seitennavigation da keine Seitennavigation benötigt
4. Auswahl aus irgendeinem Hauptmenüpunkt Level 4 öffnet Seitennavigation mit weiteren 4 Levels

Das Problem an dieser Sache ist, dass ich unterschiedliche Eintrittslevel für die Seitennavigation habe.

Hoffe ich konnte mein Problem etwas besser schildern.

Für Fragen stehe ich zur Verfügung.
Vielen, vielen Dank.

Wildi

Seitenmenuebeispiel.jpg
Hauptmenuebeispiel.jpg

Wool ·

Sorry, aber entweder ich blicke immer noch nicht durch was Du vor hast, oder Du hast mit entryLevel den falschen Ansatz gewählt.

Deine letzte Erklärung deute ich so, dass Du im Sub-Menü die Unterseiten der im Hauptmenü gewählten Seiten ausgeben willst.
Dann nimm das "entryLevel = 2" aus deinem Code für das Sub-Menü raus und ersetze es durch "special":

...
20 {
 10 = HMENU
 10 {
  #entryLevel = 2
  special = directory

  1 = TMENU
  1 {
   expAll = 1
   wrap = <ul>|</ul>
   NO = 1
   NO.wrapItemAndSub = <li>|</li>
   ACT < .NO
   ACT.wrapItemAndSub = <li class="active">|</li>
   CUR < .ACT
  }
  2 < .1
  3 < .2
  4 < .3
  5 < .4
  6 < .5
  7 < .6
  8 < .7
  # hier erweitern bis zur max. Leveltiefe deiner Seite !!!
 }
}
...

(habe den Menü-Code mal etwas gekürzt)