Hallo, ich habe folgendes Problem.
Ich möchte ien enfaches textmenu bauen das maximal 4 einträge anzeigen soll. Wenn es aber mehr als 4 einträge geben würde, dann soll dem menu ein weiterer eintrag mhinzugefügt werden "weitere >>".
Folgendes hatte ich mir vorgestellt bzw. ausprobiert:
LUKA.menu.Level4 = HMENU
LUKA.menu.Level4 {
entryLevel = 3
maxItems = 4
wrap = <div><ul>|</ul></div>
stdWrap {
wrap |<li>weitere >></li>
if {
value.data = register:count_menuItems
isGreaterThan = 4
}
}
1 = TMENU
1 {
NO = 1
NO.wrapItemAndSub = <li>|</li>
NO.stdWrap.htmlSpecialChars = 1
ACT = 1
ACT < .NO
}
}
Leider funktioniert das so nicht.
Zum einen, wenn die if abfrage false ist, wird einfach das gesamte menu nicht mehr angezeigt, ich würde erwarten das der wrap nicht mehr ausgeführt wird.
Zum anderen register:count_menuItems immer 4 wen ich das menu mit maxItems auf 4 beschränke. Auch wenn es eigentlich mehr unterseiten gibt.
Hat da jemand eine Idee? Speziell das mit dem if auf dem wrap.
Hi ribosom,
kleiner Hinweis zu dem Wrap:
wenn du das ohne Klammern schreibst steht da
stdWrap.if.value.data = register:count_menuItems
stdWrap.if.isGreaterThan = 4
Dir sollte nun auffallen, das das if-Konstrukt als Bedingung für
den stdWrap aufgeführt ist, was bedeutet: Wenn false dann kein Wrap.
Probier also mal lieber
stdWrap {
wrap = |<li>weitere >></li>
wrap.if {
value.data = register:count_menuItems
isGreaterThan = 4
}
}
Mit dem Count-Problem kann ich dir leider nicht weiterhelfen,
aber wenn du die Lösung hast bitte posten, das würde mich auch
interessieren
Hallo zusammen,
ich hab mich interessehalber mal mit dem Problem beschäftigt, hier ist eine funktionierende Lösung für dich:
lib.MYMENU = HMENU
lib.MYMENU {
maxItems = 5
wrap = <div><ul>|</ul></div>
1 = TMENU
1 {
NO = 1
NO.wrapItemAndSub = <li>|</li>
NO.stdWrap.cObject = COA
NO.stdWrap.cObject {
10 = TEXT
10 {
field = title
if {
value.data = register:count_HMENU_MENUOBJ
isLessThan = 4
negate = 1
}
}
20 = TEXT
20 {
value = weitere »
# da das Menü verlinkt wird (in diesem TS), musst du hier angeben, wohin der Punkt "weitere" zeigen soll - alternativ doNotLinkIt = 1 benutzen
typolink.parameter = 2
if {
value.data = register:count_HMENU_MENUOBJ
isLessThan = 4
}
}
}
}
}
Viel Spaß damit 😉
Grüße Patrick
Vielen Dank für eure Antorten. Ich habe gestern Abend noch eine Lösung hinbekommen, die für mich funktioniert.
{
lib.MYMENU = COA
lib.MYMENU 10 = HMENU
10 {
entryLevel = 3
1 = TMENU
1 {
wrap = <div class="menu1"><ul>|</ul></div>
stdWrap.append = TEXT
stdWrap.append {
value = <li id="next-nav">weitere >></li>
#stdWrap.dataWrap = - {page:pid}|
if {
value.data = register:count_menuItems
isLessThan = 4
}
}
NO {
allStdWrap {
wrap = <li>|</li>
if {
value.data = register:count_HMENU_MENUOBJ
negate = 1
isLessThan = 4
}
}
stdWrap.if < .allStdWrap.if
}
ACT < .NO
ACT = 1
ACT.stdWrap.wrap = <strong>|</strong>
}
}
20 < .10
20.1.stdWrap.append >
20.1.wrap = <div class="menu2"><ul><li id="prev-nav"><< zurück</li>|</ul></div>
20.1.NO.stdWrap.if.negate >
20.1.NO.allStdWrap.if.negate >
20.1.ACT.stdWrap.if.negate >
20.1.ACT.allStdWrap.if.negate >
}
Dadurch wird das Menu in zwei aufgeteilt (ab der position 4) und an das erste menu wird ein element dran gehängt wenn es mehr als 4 Menuitems gibt.