TYPO3 Flow – Applikation mit Dynamischen Attributen 2/3

Locations & DataFields

Wie wir in Teil 1 gesehen haben, ist es nicht schwierig, auf Model-Ebene dynamische Attribute hinzuzufügen. Die Ausgabe der Dynamischen Attribute im Frontend gestaltet sich – sobald man sich mit dem Konzept vertraut gemacht hat – auch nicht als grosse Hürde.
 
[divider type=”shadow-bottom” no_border=”1″ /]

Anzeige im Frontend

Wo immer die dynamischen Attribute angezeigt werden sollen, wird ein Fluid-Partial eingebunden. Dieses nennen wir eine DataLocation. Als Parameter muss dabei jeweils ein Location-Objekt, sowie das Datenobjekt übergeben werden, wie folgendes Diagramm illustriert:
 
Location-DataField
 
Ebenfalls daraus ersichtlich ist die n:n-Verknüfpung zwischen Locations und DataFields. Im Template wird das Partial wie folgt eingebunden:
[c light=”true” title=”” language=”++”]
<f:render partial=”DataLocation” arguments=”{location: myLocation, data: product}”/>
[/c]
Dabei wird dem Parameter data das von AbstractDataModel abgeleitete Objekt und dem Parameter Location eine Location-Instanz übergeben. Mit der Location können mehrere DataFields verknüpft sein, welche dann vom data-Objekt die dynamischen Attribute abfragen.
Ein DataField kann einen beliebigen Typ haben, welcher die Art des Feldes definiert. Möglich sind zum Beispiel:

 
[divider type=”shadow-bottom” no_border=”1″ /]

Location-Partial

Die vorhin definierten Typen müssen im Location-Partial abgebildet sein. In unserem Beispiel sieht das so aus:
[text-blocks id=”17384″]
Dem geschulten Auge fallen dabei drei Dinge auf:

  1. Es werden custom ViewHelper verwendet
  2. Für den POST-Request werden die Daten in einem separaten Daten-Array gespeichert; das muss beim Speichern berücksichtigt werden
  3. Das Partial muss immer innerhalb eines <form>-Tags liegen

 
[divider type=”shadow-bottom” no_border=”1″ /]

ViewHelper

Format\UcfirstViewHelper

Ist soweit selbsterklärend. Es braucht nur einen Linien Code in der render-Methode:
[text-blocks id=”17387″]

Data\CheckedViewHelper

Bestimmt, ob eine Checkbox oder ein Radio-Button gechecked ist oder nicht. Die render-Methode beinhaltet folgende Zeilen:
[text-blocks id=”17390″]

Data\ValueViewHelper

Liest die von den in der Location definierten DataFields angeforderten Daten aus einem AbstractDataModel-Objekt.
[text-blocks id=”17392″]
 
[divider type=”shadow-bottom” no_border=”1″ /]

Actions

Die edit- und update-Actions für Views, welche das DataLocation-Partial laden, müssen angepasst werden.

editAction

[text-blocks id=”17394″]

updateAction

[text-blocks id=”17396″]
Hier ist $product natürlich das zu speichernde AbstractDataModel-Objekt.
 
[divider type=”shadow-bottom” no_border=”1″ /]

Abschluss

[column size=”1/2″]
Nun muss noch die Verwaltung der Location- und DataField-Objekte eingebaut werden. Diese CRUD-Views und -Actions können ganz bequem per Flow-Kommandozeilentool erstellt werden.
[button url=”http://flowframework.readthedocs.org/en/stable/TheDefinitiveGuide/PartII/Kickstart.html#command-line-tool” color=”orange” size=”s” icon=”icon-arrow-right”]Flow-Kommandozeilentool[/button]
 
[/column]
[column size=”1/2 last”]
Damit ist auch der zweite Teil abgeschlossen. Das Feature kann nun in der Typo3-Flow-Applikation verwendet werden.
[button url=”/kompetenzen/individuallosungen/typo3-flow/” color=”blue” size=”s” icon=”icon-arrow-right”]TYPO3 Flow[/button]
 
[/column]
Bei uns wurde das Feature natürlich für die spezifischen Kundenwünsche noch weiter angepasst, was auch problemlos möglich ist. Dies würde aber den Scope dieses Beitrages sprengen. Etwas tiefer in die Materie geht’s dann beim dritten Teil: DQL-Generator!
[button url=”/kompetenzen/individuallosungen/” color=”gray” size=”s” icon=”icon-arrow-right”]Individuallösungen[/button]
 
[column size=”3/4″]
 
[/column]
[column size=”1/4 last”]
 
[button url=”/blog/2016/03/29/typo3-flow-applikation-mit-dynamischen-attributen-33-dql-generator/” color=”orange” size=”m” icon=”icon-arrow-right”]zum Teil 3/3[/button]
 
[/column]