[Frage] [Frage] Referenzen auf TMENU's funktionieren nicht TYPO3-Version: -

  • kruemel1337 kruemel13...
    TYPO3-Anwärter
    0 x
    5 Beiträge
    0 Hilfreiche Beiträge
    29. 08. 2014, 11:48

    Hallo miteinander!

    Ich bin auf ein Verhalten von Typo3 CMS gestoßen, dass sich mir nicht spontan erschließt.

    Ich möchte ein TMENU wiederverwenden, die Definition ist wie folgt:

    1. lib.mainMenu.stdItem = TMENU
    2. lib.mainMenu.stdItem {
    3. wrap = <ul>|</ul>
    4. NO = 1
    5. NO.wrapItemAndSub = <li>|</li>
    6. ACT = 1
    7. ACT.wrapItemAndSub = <li class="active">|</li>
    8. CUR = 1
    9. CUR.wrapItemAndSub = <li class="current">|</li>
    10. }

    Folgender Code funktioniert wie erwartet (eine Kopie des TMENUs):

    1. lib.mainMenu.level_0 =< lib.mainMenu.stdMenu
    2. lib.mainMenu.level_0.10 {
    3. entryLevel = 0
    4. 1 < lib.mainMenu.stdItem # this works fine
    5. 1.wrap >
    6. }

    Tausche ich den Kopieroperator durch den Referenzoperator aus, gibt T3 diese Menüebene nicht mehr aus.

    1. lib.mainMenu.level_0 =< lib.mainMenu.stdMenu
    2. lib.mainMenu.level_0.10 {
    3. entryLevel = 0
    4. 1 =< lib.mainMenu.stdItem # this does not work!
    5. 1.wrap >
    6. }

    Ich erwarte an dieser Stelle, dass eine Referenz genauso funktionieren würde wie eine Kopie. Was ist hier das Problem? Behandelt T3 TMENU's auf eine andere Art und Weise wie COA's?

    Viele Grüße,

    Kruemel


  • OnkelEdi OnkelEdi
    Jedi-Ritter
    0 x
    129 Beiträge
    2 Hilfreiche Beiträge
    01. 09. 2014, 12:35

    Hallo Kruemel,

    hat das einen Grund warum du referenzieren möchtest und es nicht einfach kopierst?

    Eduard

  • kruemel1337 kruemel13...
    TYPO3-Anwärter
    0 x
    5 Beiträge
    0 Hilfreiche Beiträge
    01. 09. 2014, 12:55

    Hallo!
    Ja: Die Idee ist es eine wiederverwendbare Bibliothek an TS Snippets aufzubauen. Diese Snippets binde ich als Basistemplate in ein Root Template ein, d.h. es entsteht im Analyzer folgende Struktur

    |-lib_rootlinemenu
    |-lib_navigationmenu
    |-lib_...
    root_page_setup

    D.h. Die "lib_" files werden vor dem Root-Template geparsed, was auch nötig ist um diese dann im "root_page_setup" verwenden zu können.

    Möchte ich nun für alle Menüebenen auf der Seite den z.B. wrap für ACT ändern, muss ich dies im "lib_..."-File machen. Das ist aber in meinen Augen sehr unschön, den Quellcode einer "Library" die ja prinzipiell generisch sein soll, direkt zu ändern.

    Was ich eigentlich anstrebe ist Code ähnlich wie folgt:

    1. page {
    2. 10 < lib.navigationMenu.level_0_to_1
    3. 20 < lib.navigationMenu.level_2
    4. }
    5.  
    6. lib.navigationMenu.stdLevel.ACT.wrapItemAndSub = <li class="my-custom-active-class">|</li>

    Das heißt es soll sich jetzt der ACT wrap für beide der Menüs ändern. Dies funktioniert aber nur wenn die einzelnen "level_[...]" den "stdLevel" referenzieren.

    Schade, dass das scheinbar nicht funktioniert...

    Ich habe ein Issue zu diesem Thema erstellt: https://forge.typo3.org/issues/61275

    TL;DR: Eigentlich nur Kosmetik, aber eine Referenz wäre in diesem Fall die "richtige" Lösung.

  • OnkelEdi OnkelEdi
    Jedi-Ritter
    0 x
    129 Beiträge
    2 Hilfreiche Beiträge
    01. 09. 2014, 13:42

    Hallo,

    wie sieht denn das lib.mainMenu.stdMenu aus?

  • kruemel1337 kruemel13...
    TYPO3-Anwärter
    0 x
    5 Beiträge
    0 Hilfreiche Beiträge
    01. 09. 2014, 14:19

    Das stdMenu ist lediglich das hier:

    1. lib.mainMenu.stdMenu = COA
    2. lib.mainMenu.stdMenu {
    3. wrap = <ul>|</ul>
    4. 10 = HMENU
    5. }

    Ist ein COA, weil unter Umständen noch zusätzlich ein HMENU (special.list) rein muss, dass den Link zur Homeseite rendert.

  • OnkelEdi OnkelEdi
    Jedi-Ritter
    0 x
    129 Beiträge
    2 Hilfreiche Beiträge
    01. 09. 2014, 15:02

    hm... ich kenn mich nun wirklich nicht so gut aus, aber vielleicht kann man in ein referenziertes Objekt nicht nachträglich referenzieren. Weißt du was ich meine? Also quasi die Reihenfolge.
    Ich stelle mir das so vor, dass das lib.mainMenu.stdMenu schon "fertig" ist, und da dann nix zu machen ist. Ich denke man müsste es kopieren um nachträglich noch was daran zu machen(korrigiert mich wenn ich falsch liege).

    Es ist zwar für dein Zwecke völliger Blödsinn, aber versuch doch mal einfach in deiner "original" lib.mainMenu.stdMenu auf das lib.mainMenu.stdItem zu referenzieren... dann müsste doch zum Schluss alles richtig rauskommen.

    Also ich weiß nicht ob das verständlich ist was ich meine :)

  • OnkelEdi OnkelEdi
    Jedi-Ritter
    0 x
    129 Beiträge
    2 Hilfreiche Beiträge
    01. 09. 2014, 15:05

    ...ok ich seh grad ist blödsinn :)
    da lag ich wohl falsch

  • OnkelEdi OnkelEdi
    Jedi-Ritter
    0 x
    129 Beiträge
    2 Hilfreiche Beiträge
    01. 09. 2014, 15:15

    liegt es vielleicht irgendwo an "temp" oder "lib" ich meine kann es sein dass das cachen beim referenzieren eine Rolle spielt?

  • kruemel1337 kruemel13...
    TYPO3-Anwärter
    0 x
    5 Beiträge
    0 Hilfreiche Beiträge
    01. 09. 2014, 16:05

    Ja, temp-Objekte sind generell nicht referenzierbar, da diese zur "Laufzeit" nicht existieren. Mit lib sollte es allerdings funktionieren z.B. mit einem ganz gewöhnlichen Text:

    1. lib.myText = TEXT
    2. lib.myText.value = Hello world
    3.  
    4. page = PAGE
    5. page {
    6. 10 =< lib.myText
    7. }
    8.  
    9. lib.myText.value = This is the real text!

    Wird im Endeffekt "This is the real text!" anzeigen.

    Das Minimalbeispiel mit HMENU (eigentlich genau das gleiche) funktioniert nicht:

    1. lib.myMenuLevel = TMENU
    2. lib.myMenuLevel {
    3. NO = 1
    4. NO.wrapItemAndSub = <li>|</li>
    5. }
    6.  
    7. page = PAGE
    8. page {
    9. 10 = HMENU
    10. 10 {
    11. 1 =< lib.myMenuLevel
    12. }
    13. }
    14.  
    15. lib.myMenuLevel.NO.wrapItemAndSub = <li class="normal">|</li>

    Sollte prinzipiell genauso funktionieren... Das Problem ist nicht, dass das nachträgliche ändern nicht tut - das klappt, es scheint als würde T3 Referenzen an den Stellen HMENU.1/2/3/4 nicht auflösen...

  • kruemel1337 kruemel13...
    TYPO3-Anwärter
    0 x
    5 Beiträge
    0 Hilfreiche Beiträge
    01. 09. 2014, 16:09

    Update: Es hat sich was im T3 Redmine getan: https://forge.typo3.org/issues/61275

    Des Rätsels Lösung: TMENU's sind keine Content Objects sondern Menu Objects. Referenzen sind zur Zeit nur für Content Objects implementiert.