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″]
[/column]
[column size=”1/2 last”]
Vor- und Nachteile gibt es natürlich bei Beiden. Hier aus der Sicht der dynamischen Applikation:
Wartungsarbeiten nach Abschluss des Projektes werden reduziert (d.h. Kosten nach Abschluss geringer)
Kunde kann seine Applikation jederzeit nach seinen Bedürfnissen gestalten
Initiale Entwicklung kostet Zeit und damit Geld
Lösung ist komplexer
[/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:
- Backend: Dynamische Attribute (Dieser Beitrag)
- Frontend: Locations & DataFields
- 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″]
“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”]
[button url=”/kompetenzen/individuallosungen/typo3-flow/” color=”blue” size=”s” icon=”icon-arrow-right”]TYPO3 Flow[/button]
[/column]
[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]