Hallo,
ich habe hier ein Menü von Georg Ringer leicht modifizieren wollen, indem ich die <li> mit der elementUid in den CSS-class-namen einbaue. Leider funktioniert das nicht mit wrapItemAndSub weil laut Referenz der Datentyp wrap /stdWrap ist und subst_elementUid nur zusammen mit einem allwrap läuft. Ändere ich das Menü in einen allwrap wird das menü nicht mehr richtig aufgebaut, da das <ul> der 2. Menüebene dann nicht mehr innerhalb der eltern-<li> liegt.
<ul>
<li>Ebene 1</li>
<ul><li>Ebene2</li></ul>
</ul>
anstelle von
<ul>
<li>Ebene 1
<ul><li>Ebene2</li></ul>
</li>
</ul>
Kann mir jemand weiterhelfen wie ich die elementUid in alle <li>s reinbekomme?
hier mein bisheriges TS:
HAUPTNAVIGATION = HMENU
HAUPTNAVIGATION {
special = directory
special.value = 2
1 = TMENU
1 {
expAll = 1
wrap = <ul id="hauptnavigation">|</ul>
noBlur = 1
NO = 1
NO.subst_elementUid = 1
NO.subst_title = 1
NO.ATagParams =
NO.ATagTitle.field = title
NO.allWrap = <li class = "topnav_{elementUid}">|</li>
IFSUB = 1
IFSUB.subst_elementUid = 1
IFSUB.wrapItemAndSub = <li class="topnav_{elementUid} menuparent">|</li>
ACTIFSUB < .IFSUB
}
2 < .1
2.wrap = <ul>|</ul>
3 < .2
4 < .2
}
vielen Dank für Eure Hilfe
Eric
Hallo Eric.
Der Trick liegt im richtigen Zusammenpuzzlen ;-)
Zunächst einmal ein Link auf den Wraps sind(k)ein Fluch-Blogbeitrag. Hier wird schematisch der Zusammenhang bzw. die Reihenfolge der ganzen Wraps in Menüs dargestellt.
Daraus kann man dann ableiten, dass eine Kombination des wrapItemAndSub und allWrap zum gewünschten Ergebnis führen kann:
- Verwende den allWrap zum Öffnen des LI-Elements
- Verwende wrapItemAndSub zum Schließen.
Wenn Du sorfältig alle Fälle bedenkst, dann kommt am Ende sauberer XHTML-Code heraus.
Viele Grüße
Julian
Hi Julian,
Danke für Deine Antwort, aber leider hat mich das Schema nicht weitergebracht, da es meine Skriptfähigkeiten übersteigt, daraus ein eigenes Menü zu bauen. Ich habe mir vorerst selbst weitergeholfen, indem ich dem Link und nicht der <li> die elementUid gegeben und mein css leicht verändert habe:
HAUPTNAVIGATION = HMENU
HAUPTNAVIGATION {
special = directory
special.value = 2
1 = TMENU
1 {
expAll = 1
wrap = <ul id="hauptnavigation">|</ul>
noBlur = 1
NO = 1
NO.subst_elementUid = 1
NO.subst_title = 0
NO.ATagParams =
#NO.ATagTitle.field = title
NO.ATagParams = class= "topnav_{elementUid}
NO.allWrap = <li class="first">|</li> |*| <li class="inbetween">|</li> |*| <li class="last">|</li>
IFSUB = 1
IFSUB.subst_elementUid = 1
IFSUB.subst_title = 0
IFSUB.ATagParams =
#IFSUB.ATagTitle.field = title
IFSUB.ATagParams = class= "topnav_{elementUid}
IFSUB.wrapItemAndSub = <li class="menuparent">|</li>
ACTIFSUB < .IFSUB
}
2 < .1
2.wrap = <ul>|</ul>
3 < .2
4 < .2
}
Es funktioniert so zwar ohne Probleme aber generell mag ich es nicht, etwas so wenig zu verstehen. Und, dass ich es nicht hinbekomme, jedes Element (in dem Fall das <li> ) so wie ich es möchte, manipulieren zu können.
Gruß
Eric
Hm, verständlich. :-( Wraps sind anfangs eher Fluch - wenn man sie verstanden hat, aber ein Segen. :-)
Daher gebe ich gerne noch weitere Hilfe. Das mit dem Zusammenbasteln der umschließenden LI-Tags könnte in dieser Art aussehen:
NO = 1
NO.ATagParams =
NO.ATagTitle.field = title
NO.subst_elementUid = 1
NO.subst_title = 1
NO.allWrap = <li class = "topnav_{elementUid}">|
NO.wrapItemAndSub = |</li>
Wenn Du Dir nun anhand des Schemas mal ein konkretes HTML-Menü anschaust, dann sollten allWrap und wrapItemAndSub an den passenden Stellen die passenden HTML-Stücke hinterlassen.
Ahh,
ich hätte gedacht, wenn ich das so mache, wird der Inhalt 2x eingefügt, weil ja 2x der | Einfügemarker verwendet wird. Wenn ich jetzt das Schema richtig verstanden habe, umgibt das wrapItemAndSub den allWrap und deshalb wird bei dem 2. | nicht der content eingefügt, sondern der in der Hirarchie weiter unten liegende allWrap, wie er in der Zeile davor zusammengebaut wird. Ist das so einigermaßen richtig?
Genau.
Es gibt eine Abarbeitungreihenfolge, in den die ganzen Wraps und Funktionen greifen. Wie bei Termen in der Mathematik wird dann von ganz innen nach außen "ausgerechnet", wobei gewisse Wertigkeiten/Rechenregeln gelten, sich den jeweilige Inhalt aber aus den bereits "errechneten" Teilen weiter innen ergibt. Das Schema versucht diese Reihenfolge der Wraps darzustellen.
Danke, dass Du Dir die Zeit genommen hast mir das mal in klaren und vor allem einfachen Worten zu erklähren.
Es ist immer wieder schön, wenn sich das komplexe Gewirr typo3 wieder ein Stück entheddert und es nicht mehr als ganz so riesig und undurchschaubar entpuppt. Ich stürz mich direkt wieder in seine tiefen und melde mich dann mit dem nächsten Problem... ;-)
Eric