Datastructure XML aus TemplaVoila in Dateien auslagern
Heute gibt es einen kleinen TemplaVoilà-Technik-Tipp.
Zunächst zum technischen Hintergund: TemplaVoilà (TV) legt beim Erzeugen eines Templates zwei Datensätze an: In der DataStructure (DS) sind die Felder definiert, die z.B. im Backend angezeigt werden.
Außerdem enthält sie Information zum Rendering der einzelnen Felder, z.B. in Form von TypoScript. Dies ist als XML in der Datenbank gespeichert.
Der zweite Datensatz, das TemplateObject (TO), enthält Informationen zum Mapping, also der Verbindung zwischen der DS und dem HTML-Markup.
Wer seine TYPO3-Templates mit TemplaVoilà aufbaut ist sicher schon mal in die Situation gekommen, dass er manuelle Änderungen an der von TV erstellten DataStructure vornehmen musste. Das ist z.B. häufig der Fall, wenn man nachträglich das TypoScript verändern muss oder im Backend Felder haben möchte, die nicht direkt auf das Markup gemappt, sondern nur im TypoScript benutzt werden.
Ändert sich nun nachträglich nochmal das Mapping des Templates, z.B. weil das Markup im HTML-Templateverändert wurde, muss man aufpassen, dass man nicht versehentlich auf "update DS/TO" klickt. Denn dann wird das manuell veränderte XML von TV einfach überschrieben.
Hinzu kommt, dass man das XML in der kleinen Textarea unmöglich komfortabel bearbeiten kann und dieses natürlich auch nicht z.B. mit SVN versioniert werden kann.
Kürzlich hatten wir genau diese Situation bei einem größerem Kundenprojekt. Alle Dateien sind versioniert - nur das XML steht in der Datenbank und war nicht versioniert. Außerdem mussten mehrfach manuelle Änderungen an der XML-DataStructure und am Mapping vorgenommen werden.
Wir begannen nach einer Lösung zu suchen das XML in eine Datei auszulagern und unsere Suche ergab, dass wir nicht die einzigen waren, die an einer Lösung interessiert sind.
Bastian Waidelich gab uns dann einen Tipp und veröffentlichte die Extension np_includeds auf forge.typo3.org (bisher nur dort, noch nicht im TER verfügbar!). Diese Extension macht genau das was wir in dem Moment gesucht hatten.
Im Extension-Manager konfiguriert man bei der Installation zwei Verzeichnisse - einen für Page Templates und den anderen für FC Elements. Alle .xml-Dateien aus diesen Verzeichnissen werden nun im TV-Backend-Modul dargestellt und die TemplateObjects (TO) können diesen zugewiesen werden.
Man erstellt also wie gewohnt über TV das TO und DS. Anschließend kopiert man das XML aus der DS in eine Datei im konfigurierten Verzeichnis. In TV erscheint diese dann als statische DS und man kann das TO dieser zuweisen. Hat man das Template bereits irgendwo für einen Seite oder ein FCE verwendet, muss man einmal dort die ausgewählte DS ändern.
Den von TV erzeugten DS-Datensatz benötigt man dann nicht mehr und kann ihn einfach löschen.
Interessanter Weise ist diese Funktionalität der statischen DataStructures in TemplaVoilà bereits integriert. Man kennt sie nur nicht und/oder weiß nicht, wie man sie benutzt. Im Prinzip kann auch manuell z.B. in der localconf.php ein Array konfigurieren, dass die statischen DS zur Verfügung stellen. Genau das ist es was np_includeds automatisch und viel komfortabler erledigt.
Wer viel mit TV arbeitet sollte auf die Extension von Bastian einen Blick werfen.
- 1 Kommentare


Hmm...
Auf den ersten Blick dachte ich: Wow, endlich! Beim Zweiten hinsehen fiel mir auf, dass mir die Datentruktur ohne das passende Template Objekt (templatemapping) auch nicht so viel bringt. Trotzdem danke für den Tipp!
Mich würde interessieren, wie man die das Array mit den XMLs in der localconf.php angeben muss.