[Frage] Submenu für bestimmte Seite ersetzen [Gelöst] TYPO3-Version: 6.2.7

  • 0 x
    9 Beiträge
    1 Hilfreiche Beiträge
    03. 12. 2014, 21:33

    Hallo,

    ich habe ein relativ simples Menu im TS:

    1. lib.mainmenu = HMENU
    2. lib.mainmenu {
    3. entryLevel = 0
    4. special = directory
    5. special.value = {$page.mainmenu}
    6.  
    7. 1 = TMENU
    8. 1 {
    9. NO {
    10. field = nav_title // title
    11. wrapItemAndSub = <li>|</li>
    12. }
    13. wrap = <ul>|</ul>
    14. expAll = 1
    15. }
    16. 2 < .1
    17. }

    Das rendert also eine Liste und wenn es auf der zweiten Ebene Seite gibt, diese als Kindliste.
    Ich will nun für eine bestimmte Seite der ersten Ebene, welche keine Kindseiten hat, als Kindmenu Daten aus einer Extension einfügen. Ich würde die Daten mit RECORDS-Element oder per USER-Element auslesen, habe aber keinen Schimmer, wie ich die in das Menü bekomme.
    Habe schon bisschen rumprobiert und hinbekommen, den wrap für diese Seite im Menü zu überschreiben, aber nicht mehr:

    1. lib.mainmenu.1.NO.wrapItemAndSub = <li>XXX|</li>
    2. lib.mainmenu.1.NO.wrapItemAndSub.if {
    3. value.data = field: uid
    4. equals = 17
    5. }

    Kann mir jemand einen Denkanstoß geben, wie man das lösen könnte? Danke!

  • 0 x
    9 Beiträge
    1 Hilfreiche Beiträge
    07. 12. 2014, 10:18 - Lösung

    Hi Wool,

    danke für den Tipp, das hat es gebracht. Ich habe nun nur den after-Wrap überschrieben, das ist genau das, was ich brauchte:

    1. lib.menuuser = USER
    2. lib.menuuser {
    3. ....
    4. }
    5. lib.custommenu = COA
    6. lib.custommenu {
    7. 10 < lib.menuuser
    8. if {
    9. value.data = field: uid
    10. equals = 17
    11. }
    12. }
    13. lib.mainmenu.1.NO.after.override.cObject < lib.custommenu
    14. lib.mainmenu.1.CUR.after.override.cObject < lib.custommenu

    Nochmal danke für die Anregungen!


  • 1
  • jenses jenses
    Flash Gordon
    0 x
    3087 Beiträge
    106 Hilfreiche Beiträge
    04. 12. 2014, 06:46

    Du machst es dir unnötig kompliziert.
    Nimm eine Condition und schreib da hinein deinen abweichenden Menücode:

    1. ...
    2. Menü-TS
    3. ...
    4. [global]

  • Wool Wool
    Jedi-Meister
    0 x
    324 Beiträge
    2 Hilfreiche Beiträge
    04. 12. 2014, 10:59

    Hallo,

    "special" und "entryLevel" zusammen ist bäh... böse... brrr... nicht machen!

    ...
    ANMERKUNG: Setzen Sie nicht die Eigenschaft .entryLevel für ein HMENU, wenn Sie diese [i](.special)[/i] Option benutzen! ...

    Quelle: [url]http://www.typo3.net/tsref/cobject/hmenu/[/url]
    [b]AUSNAHME:[/b] .special = keywords

    und so sollte es dann aussehen für den aktuellen Status:

    1. lib.mainmenu = HMENU
    2. lib.mainmenu {
    3. #entryLevel = 0
    4. special = directory
    5. special.value = {$page.mainmenu}
    6. 1 = TMENU
    7. 1 {
    8. NO {
    9. field = nav_title // title
    10. wrapItemAndSub = <li>|</li>
    11. }
    12. wrap = <ul>|</ul>
    13. expAll = 1
    14. }
    15. 2 < .1
    16. }
    17. lib.mainmenu.1.NO.wrapItemAndSub = <li>XXX|</li>
    18. [global]

    Hier ein Beispiel mit PHP-Funktion:
    [url]http://www.typo3wizard.com/de/snippets/menus/menues-erstellen-mit-daten-aus-anderen-tabellen-als-pages.html[/url]

    Hier ein Beispiel einer Produktliste:
    [url]http://stackoverflow.com/questions/21116289/typo3-extbase-hmenu-with-multiple-records[/url]

    Hier Beispiele wie man in TS Links bastelt:
    [url]http://www.thefox.ch/extdev/typo3/typoscript/cobject/text/typolink/[/url]

    Ich hoffe das genügt als Ansatz. ;)

    Bitte auch Deine Lösung hier mit posten, danke.

  • 0 x
    9 Beiträge
    1 Hilfreiche Beiträge
    04. 12. 2014, 18:51

    Hi, ich danke euch für euren Input!
    Allerdings ist das nicht ganz das, was ich machen will. Da habe ich mich etwas unklar formuliert.

    Besagtes TS-Menu rendert folgenden Baum:

    - Seite A
    --- Sub A1
    --- Sub A2
    - Seite B
    --- Sub B1
    --- Sub B2
    - Seite C
    - Seite D
    --- Sub D1
    --- Sub D2

    Seite C (die irgendwo sein kann, also keinen festen Platz hat) hat keine Unterseiten. Das HTML für das Kindseitenmenü habe ich ein einem TS-Objekt lib.submenu. Das ist ein USER-Objekt, generiert von einer Extension und liefert einen String mit HTML zurück. Das soll nun in das Element von Seite C.

    Bisher:

    1. <ul>
    2. ...
    3. <li>Seite C</li>
    4. ...
    5. </ul>

    Jetzt:

    1. <ul>
    2. ...
    3. <li>
    4. Seite C
    5. <!-- kommt aus dem USER-Objekt -->
    6. <ul><li>....</li></ul>
    7. <!-- Ende USER-Objekt -->
    8. </li>
    9. ...
    10. </ul>

    Der TypoScript-Code

    1. ...
    2. [global]

    funktioniert nicht, weil das dann nur auf Seite mit PID 17 angezeigt werden würde, aber ich will das Submenü immer da haben, es soll nur eben als Kind von Seite 17 im Menü auftauchen.

    Zu Wraps hab ich mich belesen, soweit ich das aber verstanden habe kann ich da nicht irgendwo das USER-Objekt reinklemmen - wenn das geht weiß ich schlicht nicht wie.

    Der Code von oben:

    1. lib.mainmenu.1.NO.wrapItemAndSub = <li>XXX|</li>
    2. lib.mainmenu.1.NO.wrapItemAndSub.if {
    3. value.data = field: uid
    4. equals = 17
    5. }

    ist schon genau das, was ich brauche, nur dass anstatt des XXX der Inhalt des USER-Objektes stehen muss.

    Mit z.B.

    1. lib.mainmenu.1.NO.wrapItemAndSub < lib.submenu
    2. lib.mainmenu.1.NO.wrapItemAndSub.if {
    3. value.data = field: uid
    4. equals = 17
    5. }

    schreibt es mir nur "USER" in den Wrap und nicht den eigentlichen Inhalt des USER-Objektes.

    Vielleicht habt ihr jetzt noch Ideen? Ich würde mich freuen, vielen Dank schon im Voraus!

  • Wool Wool
    Jedi-Meister
    0 x
    324 Beiträge
    2 Hilfreiche Beiträge
    05. 12. 2014, 08:02

    ah... okay...

    dann schau dir das "stdWrap.cObject" mit "overwrite" an.

    Beispiel: [url]http://typo3-blog.net/tutorials/news/ausfuehrliches-tmenu.html[/url]

    Das USER-Objekt baust du dann direkt im cObject
    oder ausserhalb als "temp.spezialuntermenu" und bindest es dann bspw. per 20 < temp.spezialuntermenu
    ins cObject ein.

  • 0 x
    9 Beiträge
    1 Hilfreiche Beiträge
    07. 12. 2014, 10:18

    Hi Wool,

    danke für den Tipp, das hat es gebracht. Ich habe nun nur den after-Wrap überschrieben, das ist genau das, was ich brauchte:

    1. lib.menuuser = USER
    2. lib.menuuser {
    3. ....
    4. }
    5. lib.custommenu = COA
    6. lib.custommenu {
    7. 10 < lib.menuuser
    8. if {
    9. value.data = field: uid
    10. equals = 17
    11. }
    12. }
    13. lib.mainmenu.1.NO.after.override.cObject < lib.custommenu
    14. lib.mainmenu.1.CUR.after.override.cObject < lib.custommenu

    Nochmal danke für die Anregungen!

  • 1