TYPO3 Flow – Applikation mit Dynamischen Attributen 1/3

Entscheidung

Manchmal weiss man nicht, was auf Einen zukommt. Vorbereiten kann man sich trotzdem.
Bei einem komplexen Projekt, bei dem bis zum Zeitpunkt des Projektstarts (und darüber hinaus) nicht klar ist, welche Informationen überhaupt wo angezeigt werden müssen, hat man die Wahl:
Möchte ich und mein Team im Laufe der Jahre immer und immer wieder Anpassungen am Code vornehmen? Oder gestalte ich meine Applikation so, dass sie dynamisch erweiterbar ist?
 
[column size=”1/2″]
Entscheidung
 
[/column]
[column size=”1/2 last”]
Vor- und Nachteile gibt es natürlich bei Beiden. Hier aus der Sicht der dynamischen Applikation:

 
[/column]
Entscheidend sind natürlich meistens die finanziellen Mittel: Möchte der Kunde das Geld lieber während des Projektes investieren oder danach?
 
[column size=”1/2″]
Wenn Ersteres, und Sie sich dieser Aufgabe widmen dürfen, erfahren Sie hier alles Wissenswerte dazu.
 
[/column]
[column size=”1/2 last”]
[button url=”/referenzen/aktuelle-projekte/” color=”gray” size=”s” icon=”icon-arrow-right”]Aktuelle Projekte[/button]
[button url=”/kompetenzen/individuallosungen/” color=”gray” size=”s” icon=”icon-arrow-right”]Individuallösungen[/button]
 
[/column]
[divider type=”shadow-bottom” no_border=”1″ /]

Ein Beitrag in drei Teilen

Da das Thema ziemlich komplex ist, werden wir es in drei Teilen besprechen:

  1. Backend: Dynamische Attribute (Dieser Beitrag)
  2. Frontend: Locations & DataFields
  3. Anwendung: DQL-Generator

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

Dynamische Attribute

[column size=”1/2″]
Wir gehen von folgendem Fallbeispiel aus: Wir haben von einer Firma den Auftrag bekommen, eine webbasierte Verwaltungsapplikation für das Produktelager zu erstellen. Die Firma hat verschiedene Abteilungen, welche aber dasselbe Lager verwenden. Die Abteilungen haben alle unterschiedliche Produkte mit verschiedenen Attributen.
 
[/column]
[column size=”1/2 last”]
Wir möchten nun nicht für jede Abteilung die Attribute manuell bewirtschaften. Ausserdem kann es sein, dass eine weitere Abteilung mit neuen Produkten und neuen Attributen hinzukommt. Jedes Mal das ganze Prozedere noch einmal durchgehen? Fehlanzeige!
 
[/column]
[divider type=”shadow-bottom” no_border=”1″ /]

Domain\Model\Data

Wir müssen als erstes Flow beibringen, mit dynamischen Attributen umgehen zu können. Dazu brauchen wir ein neues Model-Objekt namens “Data”, welches den Namen des Attributes, dessen Wert und die Verknüpfung zum Objekt, zu dem es gehört, gespeichert werden kann:

Data
identifier string
value string
dataModel \MyCompany\MyProject\Domain\Model\AbstractDataModel

Obwohl es möglich ist, einen Persistence Objekt Identifier (Datenbank-ID) im “value”-Feld zu speichern und damit ein Objekt als dynamischer Wert zu speichern, wird dies von unserer Seite nicht empfohlen. Es kann dabei schnell zu unübersichtlichen Datenstrukturen kommen.
 
[divider type=”shadow-bottom” no_border=”1″ /]

Domain\Model\AbstractDataModel

 
[column size=”1/2″]
Wie Sie sehen können, gehen wir damit nahtlos zur nächsten benötigten Klasse: Dem AbstractDataModel. Diese ist der Wrapper für alle Klassen, welche die Funktionalität der dynamischen Attribute verwenden möchten.
 
[/column]
[column size=”1/2 last”]
In unserem Beispiel wird es also eine Klasse “Domain\Model\Product” geben. Dieses muss von der Abstrakten Data-Model-Klasse erben:
 
[/column]
[text-blocks id=”17400″]
Die Klasse selber muss sicherstellen, dass das Schreiben und lesen der dynamischen Attribute möglich ist. Dazu muss sie folgende Methoden beinhalten:
[text-blocks id=”17402″]
 
[column size=”1/2″]

Und das war’s schon. Jetzt kann TYPO3 Flow mit dynamischen Attributen umgehen! In den Fluid-Templates kann nun ein solches Property mit {product.myAttribute} aufgerufen werden. Da die Attribute von Fluid nicht direkt, sondern über die get*-Methode des Objektes aufgerufen werden, funktioniert das auch einwandfrei.
“unset”-Methoden sind nicht nötig, da dafür der “set”-Aufruf mit Parameter-Wert “0” verwendet werden kann.
 

[/column]
[column size=”1/2 last”]
 
typo3_flow-logo
[button url=”/kompetenzen/individuallosungen/typo3-flow/” color=”blue” size=”s” icon=”icon-arrow-right”]TYPO3 Flow[/button]
 
[/column]
 

[divider type=”dots” /]
[big_text]So einfach? Das kann ja gar nicht sein![/big_text]
[divider type=”dots” /]
Stimmt. Im Moment müssen wir für die Ausgabe im Frontend den Namen des Attributes wissen, was ja nicht Sinn der Sache ist. Ausserdem gibt es noch viel mehr, was man dank (oder: trotz?) diesem Feature entwickeln kann. Dafür gibt’s aber Teil 2 und 3, welche in Kürze folgen werden.

 
[column size=”3/4″]
 
[/column]
[column size=”1/4 last”]
[button url=”/blog/2016/03/15/typo3-flow-applikation-mit-dynamischen-attributen-2/” color=”orange” size=”m” icon=”icon-arrow-right”]zum Teil 2/3[/button]
 
[/column]