WebsiteBuilder
Aus Contao Community Documentation
Der WebsiteBuilder ist ein XML Konfigurierbarer Datensatzgenerator. In der XML werden @datasets@ konfiguriert, die aus Variablen, Datenzeilen und Dateien bestehen können.
Erweiterungs-Übersicht | |
---|---|
Name des Entwicklers | Tristan Lins (tril) |
Entwickler Webseite | http://dev.typolight-forge.org/projects/show/websitebuilder |
Version der Erweiterung | 1.0 |
Kompatibilität mit Contao Version | 2.9.0 - 2.9.1 |
Link zum Extension Repository | http://www.contao.org/erweiterungsliste/view/WebsiteBuilder.de.html |
Link zum Tracker | http://dev.typolight-forge.org/projects/websitebuilder/issues |
Abhängig von ff. Erweiterungen | 3CFramework, DC_Memory |
Inhaltsverzeichnis
Abhängigkeiten
Die XML Konfiguration
Die XML Dateien können sowohl lokal, als auch von extern (http://-URLs) bezogen werden. Es ist möglich mehrere @datasets@ in einer XML einzutragen, der WebsiteBuilder ist aber in der Lage, mehrere XML Dateien zu laden. Konfiguriert werden diese über die Systemeinstellungen, dort werden die Pfade zu den XML Dateien eingetragen.
Eine Beispiel XML zum erstellen eines Nachrichtenarchives, der notwendigen Module und einer Teaser-, Archiv- und Leser-Seite befindet sich im Anhang.
Variablen
Es können mehrere Variablen festgelegt werden, die vom Benutzer beim Einspielen der Datensätze eingegeben werden können. Außerdem können auch einzelne Daten-Zeilen als Runtime-Variablen festgelegt werden und so zwischen den einzelnen Daten-Zeilen referenziert werden. Die Konfiguration entspricht in weiten Teilen einer DCA-Feld-Konfiguration:
<wb:variable name="root_page"> <wb:label>Basisseite</wb:label> <wb:description>Die Basisseite, in der die neuen Seiten eingefügt werden.</wb:description> <wb:inputType>pageTree</wb:inputType> <wb:eval> <wb:fieldType>radio</wb:fieldType> </wb:eval> </wb:variable> <wb:variable name="theme"> <wb:label>Theme</wb:label> <wb:description>Das Theme, dem die Module hinzugefügt werden sollen.</wb:description> <wb:inputType>select</wb:inputType> <wb:foreignKey>tl_theme.name</wb:foreignKey> </wb:variable> <wb:variable name="news_archive_title"> <wb:label>Nachrichtenarchiv</wb:label> <wb:description>Der Name des Nachrichtenarchiv.</wb:description> </wb:variable>
Variablen einbinden
Variablen können bei jedem Feld-Wert genutzt werden, es gibt zwei Syntaxe zum abfragen einer Variable:
<wb:field name="title">$news_archive_title</wb:field>
Alternativ kann der Variablenschlüssel auch in geschweifte Klammern gepackt werden:
<wb:field name="title">${news_archive_title}</wb:field>
Komplexe Variablen, Zugriff auf Array Felder und Objekt Eigenschaften
Wird eine Datenzeile oder ein Objekt verwendet, kann ebenfalls mit zwei unterschiedlichen Varianten auf Felder zugegriffen werden.
<wb:field name="user">$this.User.id</wb:field>
Alternativ mit PHP Objektnotation:
<wb:field name="user">$this->User->id</wb:field>
Um das Feld *id* abzufragen, ist eine absolute Referenzierung nicht notwendig, Variablen werden immer auf einen primitiven Typ aufgelöst, sollte der Wert einem Array oder Objekt entsprechen wird der Wert *id* abgefragt, d.h. die folgenden Ausdrücke sind equivalent:
<wb:field name="user">$this.User</wb:field> <wb:field name="user">$this->User</wb:field> <wb:field name="user">$this.User.id</wb:field> <wb:field name="user">$this->User->id</wb:field>
Spezielle Variablen
Die Variable $this ist das BackendModul, worüber sich z.B. der Backend Benutzer abfragen lässt.
Die Systemeinstellungen $GLOBALS['TL_CONFIG'] sind ebenfalls immer als Variablen verfügbar, z.B. ist $GLOBALS['TL_CONFIG']['uploadPath'] mit der Variable $uploadPath verfügbar.
Datenzeilen
Daten-Zeilen entsprechen einzelnen Datensätzen in der Datenbank Datenbank. Angegeben werden muss die Tabelle und mehrere zu setzende Felder. Dabei muss der Entwickler des @datasets@ über die Datenbankstruktur bescheid wissen, da die Daten "einfach" in die Datenbank geschrieben werden. Außerdem ist es möglich, Kind-Daten-Zeilen zu definieren, bei denen automatisch die @pid@ gesetzt wird.
<wb:row table="tl_page" var="page_listing"> <wb:field name="pid">$root_page</wb:field> <wb:field name="title">$news_archive_title</wb:field> <wb:field name="type">regular</wb:field> <wb:field name="language" inherit="true" /> <wb:field name="published">1</wb:field> <!-- Artikel --> <wb:child table="tl_article"> <wb:field name="title">$news_archive_title</wb:field> <wb:field name="inColumn">main</wb:field> <wb:field name="published">1</wb:field> <!-- Inhaltselement --> <wb:child table="tl_content"> <wb:field name="type">module</wb:field> <wb:field name="module">$module_teaser.id</wb:field> </wb:child> </wb:child> </wb:row>
Spezialfälle für wb:field
Wenn der Wert für das Feld ein Array ist, wird dieses automatisch serialisiert.
Wird ein DCA zu der Tabelle und dem Feld gefunden, wird dessen @default@ Wert übernommen.
eval
<wb:field eval="true" />
Der Wert wird als PHP Code ausgewertet und einer Zielvariable zugewiesen, es kann also nur begrenzt Logik untegebracht werden. Diese Auswertung ist vorwiegend dazu gedacht, arrays aufzubauen z.B.
<wb:field name="groups" eval="true">array('1')</wb:field>
Daraus wird folgender PHP Code ausgewertet:
$varEvaluatedValue = array('1');
eval-user
<wb:field eval-user="true" />
Der Wert wird als PHP Code ausgewertet, anders als eval="true" muss die Zielvariable vom Code zugewiesen werden. Dies ist für Komplexe Logik interessant.
<wb:field name="groups" eval-user="true" novar="true"> $varEvaluatedValue = array(); $objGroup = $this->Database->execute("SELECT * FROM tl_member_group"); while ($objGroup->next()) { if (!$objGroup->disable) { $varEvaluatedValue[] = $objGroup->id; } } </wb:field>
Wie man sieht wird die Variable $varEvaluatedValue im PHP Code zugewiesen, dies muss unbedingt geschehen, sonst wird die Auswertung des PHP Code als Fehlerhaft angesehen!
force-array
<wb:field force-array="true" />
Der Wert wird in ein Array umgewandelt und serialisiert, z.B. @<wb:field name="groups" force-array="true">1</wb:field>@
inherit
<wb:field inherit="true" />
Der Wert wird vom Elterndatensatz innerhalb der gleichen Tabelle geerbt, z.B. @<wb:field name="language" inherit="true" />@
novar
<wb:field novar="true" />
Auf dem Feld werden keine Variablen ausgewertet, z.B. in Verbindung mit eval oder eval-user oft notwendig.
Dateihandling
Außerdem ist es möglich, Verzeichnisse und Dateien zu erstellen und externe Dateien zu laden und wenn es sich um ZIP Archive handelt, diese im Zielverzeichnis zu entpacken (das Archiv wird danach wieder gelöscht).
<wb:mkdir>$uploadPath/Neues Verzeichnis</wb:mkdir> <wb:mkfile>$uploadPath/Neues Verzeichnis/Leere Datei.txt</wb:mkdir> <wb:load target="$uploadPath/Neues Verzeichnis" unzip="true">http://www.example.com/mydata.zip</wb:load>