Menü der Unterseiten – ggf. der Elternseite, falls Shortcut

Ein Menü aus Unterseiten lässt sich ganz leicht in TypoScript bauen. Hierzu einfach ein HMENU hernehmen, und via special = directory die passenden Einstellungen vornehmen:

20 = HMENU
20 {
    // Menü der Unterseiten der aktuellen Seite
    special = directory
    special.value.data = TSFE : id
    1 = TMENU
    1 {
        NO {
            // ...
        }
    }
}

Problem

Nun trifft man gelegentlich aber auf Seitenstrukturen, bei denen Shortcuts in Verwendung sind, d.h. die aktuelle Seite eigentlich eine Menü der Unterseiten der Elternseite anzeigen sollte.

Bildschirmfoto 2014-03-11 um 10.07.21Hier wäre „Seite 2“ der Shortcut auf die erste Unterseite, und wir würden uns wünschen, dass folglich auf „Seite 2.1“ ein Menü der Unterseiten von „Seite 2“ angezeigt wird.

Lösung

Die Lösung ist hier mittels override auch recht fix erreicht:

20 = HMENU
20 {
    // Menü der Unterseiten der aktuellen Seite (unabhaengig vom Treelevel)
    special = directory
    special.value.data = TSFE : id
    // Falls aktuelle Seite aus einem Shortcut der Parent-Site hervorging, dann Unterseiten dieser anzeigen
    special.value.override {
        cObject = CONTENT
        cObject {
            table = pages
            select {
                pidInList >
                pidInList.data = leveluid : -3
                // @todo: siehe "Update"
                //where = doktype = 4 AND ((shortcut_mode=0 AND shortcut = ###currentPage###) OR shortcut_mode=1)                 
                where = doktype = 4 AND (shortcut_mode=0 AND shortcut = ###currentPage###)                 
                markers {
                    currentPage.data = TSFE : id
                }
            }
            renderObj = COA
            renderObj {
                10 = TEXT
                10.field = uid
            }
        }
    }
    1 = TMENU
    1 {
        NO = 1
        NO {
           // ...
        }
    }
}

Über eine Datenbankabfrage suchen wir Seiten, die einerseits Elternseite unserer aktuellen Seite sind, zugleich aber auch von Typ „Shortcut“ (doktype=4) sind und als Ziel unsere aktuelle Seiten haben bzw. den Modus „First subpage of current page“ haben.

TYPO3 4.5-Spezialität:

Da uidInList erst aber 4.6 stdWrap-Eigenschaften hat, kann der Wert nicht dynamisch gesetzt werden, und kommt bei 4.5 der Defaultwert von pidInList = this in die Quere. Es muss also statt uidInList die Seiten-ID der Eltern-Eltern-Seite in die pidInList-Bedingung geschrieben werden. Diese ID erhält man am einfachsten aus der Rootline.

Update

Die Logik passt noch nicht für Modus „First subpage of current page“, falls wir uns nicht auf dieser ersten Unterseite befinden, sondern auf anderer Unterseite.
Hat jemand eine Idee, wie das mit berücksichtigt werden kann?

Hinterlasse einen Kommentar.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.