Gridelement auf Daten vom Parent zugreifen

In einer TYPO3 9 Installation mit Gridelements habe ich ein extrem flexibeles Accordion-Element erstellt. Es gibt dabei ein Gridelement „Accordion-Container“, das als Container für alle zusammengehörigen Accordion-Inhaltselemente dienen soll. Weiterhin gibt es ein „Accordion-Content“ – damit können mehrere Inhaltselemente gruppiert werden. Der Container ist notwendig, um das Accordion-typische Verhalten zu realisieren: man klickt ein Element zum Öffnen an und alle anderen schließen sich. Die klickbare Überschrift wird im Accordion-Content-Element hinterlegt. Im Accordion-Container können Einstellungen wie Farbe und Verhalten für das gesamte Accordion vorgenommen werden.

Und das ist genau das Problem. Sobald ich mich im Context des Accordion-Content befinde, kenne ich die Einstellungen wie Farbe und Verhalten nicht mehr – die sind ja im Container (aka Parent) hinterlegt.

Die neueste Version von Gridelements nutzt DataProcessing, also beschloss ich einen DataProcessor einzusetzen, um an die Daten des übergeordneten Elements ranzukommen:

tt_content.gridelements_pi1.dataProcessing {
    20 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
    20 {
        if.equals.field = tx_gridelements_backend_layout
        if.value = accordion-content
        table = tt_content
        pidInList.field = pid
        where = uid=###uid### AND deleted=0 AND hidden=0
        markers.uid.field = tx_gridelements_container
        as = parent
 
        dataProcessing {
            10 = Vendor\MyExtension\DataProcessing\FlexformDataProcessor
            10 {
                as = flexform_data
            }
        }
    }
}

Die Implementierung des FlexformDataProcessor habe ich bereits in einem anderen Beitrag beschrieben.

Nachdem ich das implementiert hatte, fiel mir ein, dass ich mein Problem bestimmt auch mit variable.set aus dem Fluid ViewHelper-Set lösen könnte – und siehe da, das geht auch.

1 Kommentar

  1. Danke für deinen Beitrag! Ich hatte ein Problem, welches ich nur mit dem kleinen Zusatz „pidInList.field = pid“ lösen konnte. Und dabei hast du diesen Post erst vor drei Tagen veröffentlicht