WebsiteBuilder: Unterschied zwischen den Versionen

Aus Contao Community Documentation

(Variablen einbinden)
(Variablen durch Funktionen modifizieren)
Zeile 63: Zeile 63:
  
 
Variablen können durch Funktionen modifiziert werden. Objekt-Methoden werden nicht unterstützt!
 
Variablen können durch Funktionen modifiziert werden. Objekt-Methoden werden nicht unterstützt!
Dazu muss nach Smarty Manier einfach mit | getrennt die Filterfunktion angefügt werden:
+
Dazu muss nach Smarty Manier einfach mit | (Pipe) getrennt die Filterfunktion angefügt werden:
 
<source lang="xml">
 
<source lang="xml">
 
<wb:field name="title">$news_archive_title|strtoupper</wb:field>
 
<wb:field name="title">$news_archive_title|strtoupper</wb:field>

Version vom 28. April 2011, 15:45 Uhr

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

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>

Variablen durch Funktionen modifizieren

Variablen können durch Funktionen modifiziert werden. Objekt-Methoden werden nicht unterstützt! Dazu muss nach Smarty Manier einfach mit | (Pipe) getrennt die Filterfunktion angefügt werden:

<wb:field name="title">$news_archive_title|strtoupper</wb:field>

Oder mit geschweiften Klammern:

<wb:field name="title">${news_archive_title|strtoupper}</wb:field>

Jede PHP Funktion (strtoupper, intval, ucwords) oder benutzerdefinierte Funktion (z.B. standardize, deserialize) kann angewendet werden.

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>
Ansichten
Meine Werkzeuge

Contao Community Documentation

Ich habe es mir mal grob ausgerechnet: Bei jeder Extension von mir verbrauche ich im Durchschnitt 6 Pizzen. Wenn Dir meine Extensions gefallen, sende mir bitte mehr Pizzen. Die Adresse gibt es auf Anfrage!

Leo Unglaub
In anderen Sprachen
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge