TypoScript für Megamenu
Vorbemerkungen
Für das Megamenu nutze ich:
https://codecanyon.net/item/mdf-megamenu-bootstrap-responsive-megamenu/12496534?s_rank=1
Das Menu erzeugt ein 6-Spaltiges Bootstrap-Grid für die 3. Ebene (col-sm-2), ist also ideal für 6 Unterpunkte der zweiten Ebene. Wenn ihr eine andere Anzahl Unterpunkte in der zweiten Ebene habt, müsst ihr diesen Wert entsprechend anpassen.
Wenn Ihr für die zweite Ebene eine unterschiedliche Anzahl an Unterpunkten braucht, könnt ihr das über
special = directory
lösen. Dann könnt Ihr für jeden Punkt der ersten Ebene ein Menu mit der gewünschten Spaltenanzahl erstellen.
Hier ist der Schwachpunkt des Menus, welchen ich noch nicht gelöst habe, vielleicht hat dazu noch jemand eine Idee:
Ich würde gerne den Wert "col-sm-2" abhängig von der Anzahl der Unterpunkte der zweiten Ebene setzen lassen, damit Seiten der zweiten Ebene nahezu beliebig angelegt werden können.
#####################################################
# MEGA-Dropdown-Menu rendern, "item-{field:uid}" ist für die Funktion unerheblich,
# ich habe gerne die Möglichkeit, jeden Menüpunkt bei Bedarf individuell zu gestalten
lib.megaMenu = HMENU
lib.megaMenu {
1 = TMENU
1 {
expAll = 1
NO = 1
NO.allWrap = <li class="menu-el item-{field:uid}">|</li>
NO.allWrap.insertData = 1
NO.ATagTitle.field = abstract // description // title
IFSUB = 1
IFSUB.before = <a class="has-sub">
IFSUB.after = </a>
IFSUB.doNotLinkIt = 1
IFSUB.wrapItemAndSub = <li class="menu-el item-{field:uid}">|</li>
IFSUB.wrapItemAndSub.insertData = 1
IFSUB.ATagTitle.field = abstract // description // title
ACTIFSUB <.IFSUB
ACTIFSUB.wrapItemAndSub = <li class="menu-el active item-{field:uid}">|</li>
}
# 2. Ebene
2 = TMENU
2 {
expAll = 1
# Im Megemanu den NO-Zustand der zweiten Ebene am besten vermeiden...
NO = 1
NO.allWrap = <h4>|</h4>
NO.wrapItemAndSub = <div class="col-sm-2 col-xs-12">|</div>
NO.ATagTitle.field = abstract // description // title
IFSUB = 1
IFSUB.doNotLinkIt = 1
IFSUB.allWrap = <h4>|</h4>
IFSUB.wrapItemAndSub = <div class="col-sm-2 col-xs-12"><ul class="mdf_child_menu demo-cat"> | </ul></div>
IFSUB.wrapItemAndSub.insertData = 1
IFSUB.ATagTitle.field = abstract // description // title
ACTIFSUB <.IFSUB
ACTIFSUB.wrapItemAndSub = <div class="col-sm-2 col-xs-12 active"><ul class="mdf_child_menu demo-cat"> | </ul></div>
wrap = <div class="mdf_sub_wrap mdf_flip row">|</div>
}
# 3. Ebene
3 = TMENU
3 {
NO = 1
NO.allWrap = <li>|</li>
NO.ATagTitle.field = abstract // description // title
# eine eventuelle vierte Ebene wird in diesem Projekt einem gesonderten Menü ausgegeben
IFSUB = 1
IFSUB.wrapItemAndSub = <li> | </li>
IFSUB.ATagTitle.field = abstract // description // title
ACTIFSUB <.IFSUB
ACTIFSUB.wrapItemAndSub = <li class="active"> | </li>
}
}
Dieses TypoScript erzeugt folgende HTML-Struktur:
<li class="menu-el active item-2"><a class="has-sub">Headline, Ebene 1</a>
<div class="mdf_sub_wrap mdf_flip row">
<div class="col-sm-2 col-xs-12">
<h4>Headline, Ebene 2</h4>
<ul class="mdf_child_menu demo-cat">
<li><a href="link-1" title="link-1">link 1</a></li>
<li>...</li>
</ul>
</div>
<div class="col-sm-2 col-xs-12">
<h4>Headline, Ebene 2</h4>
<ul class="mdf_child_menu demo-cat">
<li>...</li>
<li>...</li>
</ul>
</div>
<div class="col-sm-2 col-xs-12">
<h4>Headline, Ebene 2</h4>
<ul class="mdf_child_menu demo-cat">
<li>...</li>
<li>...</li>
</ul>
</div>
<div class="col-sm-2 col-xs-12">
<h4>Headline, Ebene 2</h4>
<ul class="mdf_child_menu demo-cat">
<li>...</li>
<li>...</li>
</ul>
</div>
<div class="col-sm-2 col-xs-12">
<h4>Headline, Ebene 2</h4>
<ul class="mdf_child_menu demo-cat">
<li>...</li>
<li>...</li>
</ul>
</div>
<div class="col-sm-2 col-xs-12">
<h4>Headline, Ebene 2</h4>
<ul class="mdf_child_menu demo-cat">
<li>...</li>
<li>...</li>
</ul>
</div>
</div>
</li>
<li class="menu-el item-4"><a class="has-sub">Heasdline, Ebene 1</a>
<div class="mdf_sub_wrap mdf_flip row">
<div class="col-sm-2 col-xs-12">
<h4>Headline, Ebene 2</h4>
<ul class="mdf_child_menu demo-cat">
<li>...</li>
<li>...</li>
</ul>
</div>
<div class="col-sm-2 col-xs-12">
<h4>Headline, Ebene 2</h4>
<ul class="mdf_child_menu demo-cat">
<li>...</li>
<li>...</li>
</ul>
</div>
<div class="col-sm-2 col-xs-12">
<h4>Headline, Ebene 2</h4>
<ul class="mdf_child_menu demo-cat">
<li>...</li>
<li>...</li>
</ul>
</div>
<div class="col-sm-2 col-xs-12">
<h4>Headline, Ebene 2</h4>
<ul class="mdf_child_menu demo-cat">
<li>...</li>
<li>...</li>
</ul>
</div>
<div class="col-sm-2 col-xs-12">
<h4>Headline, Ebene 2</h4>
<ul class="mdf_child_menu demo-cat">
<li>...</li>
<li>...</li>
</ul>
</div>
<div class="col-sm-2 col-xs-12">
<h4>Headline, Ebene 2</h4>
<ul class="mdf_child_menu demo-cat">
<li>...</li>
<li>...</li>
</ul>
</div>
</div>
</li>
In mein FLUIDTEMPLATE kann ich dann mein Menu einbauen, natürlich könnte man auch die umgebenden HTML-Tags noch in TypoScript schreiben, ich habe aber gerne noch die Möglichkeit, mein Menü um statische Listenpunkte zu ergänzen (z.B. für ein Suchfeld):
FLUIDTEMPLATE
<nav id="mdf_menu" class="navbar navbar-default traditional">
<div class="collapse navbar-collapse mega-menu navbar-responsive-collapse">
<div class="container">
<ul class="nav navbar-nav">
<f:cObject typoscriptObjectPath="lib.megaMenu"/>
</ul>
</div>
</div>
</nav>
Schlussbemerkung
Dieses Menu ist so noch nicht live zu sehen, die Seite, für die es benutzt wird, befindet sich noch im Aufbau. Dort werde ich eine Variante einsetzen, diese bietet noch zusätzlich ein Bild aus den Seiteneigenschaften der ersten Ebene in der ersten Spalte des Dropdown-Menus. Außerdem werde ich dort die Spalten mit Hilfe von Flexbox erstellen, das macht die Redakteure etwas flexibler.
Ich freue mich über Feedback und Verbesserungsvorschläge, es ist mein erstes kleines TypoScript-Tutorial, ich nehme eure Anregungen gerne per Mail entgegen.
Update vom 10.05.2017
Mittlerweile konnte ich das Menü mal in einem kleinen Projekt verwenden, hier kann man es also live erleben:
Mittwald Status Seite
Erste Anlaufstelle bei Problemen mit der Website oder dem Mail-Empfang oder -Versand
Tipp für die TYPO3 Blog Extension
Ein kleiner Hinweis, der unter Umständen viel Zeit sparen kann.
TypoScript für Megamenu
Mein erstes kleines TypoScript-Tutorial, wie erstelle ich ein Megamenu für TYPO3.
E-mail Einrichtung
Hier zeige ich Ihnen, welche Informationen Sie für den Abruf Ihrer Emails benötigen und wo Sie diese eintragen müssen.