Html-Templates

From Limbas Wiki

Jump to: navigation, search
This page contains changes which are not marked for translation.

Admin-Dokumentation / Hauptseite



Einleitung

Die Limbas Formular-/Bericht-Editoren sind eine gute Möglichkeit, Formulare oder Berichte per Drag&Drop pixel-genau zu entwerfen. Einzelne Elemente wie bspw. Fließtext oder Dateninhalte sind dabei jedoch voneinander getrennt und ließen sich bisher nur vom Administrator mit Php-Skripten miteinander kombinieren.

Für Newsletter, Anschreiben, Rechnungen etc. ist es jedoch oft notwendig, Dateninhalte wie Kunden-Namen oder Preise direkt in den Fließtext zu integrieren. Seit Version 3.6 ist dies durch die neue Html-Template-Engine in Limbas komfortabel und nutzerfreundlich mit dem Wysiwyg-Editor möglich.

Funktionsweise

In das neue Template-Element im Formular-/Berichts-Editor kann normaler Text geschrieben werden, aber auch direkt Html. Die Besonderheit im Vergleich zum Textblock-Element ist, dass das Template-Element verschiedene Platzhalter im Text erkennt, welche von der Template-Engine für den Nutzer automatisch ersetzt werden. So können beispielsweise Dateninhalte eingebunden werden.

Oft werden manche Texte, wie bspw. Firmendaten, in mehreren Berichten benutzt und sollen nicht in jedem Bericht erneut eingegeben werden. Die Template-Engine erlaubt dafür einen modularen Aufbau der Formulare/Berichte: Textbausteine können in einer eigenen Tabelle des Typs Berichtsvorlagen definiert werden und mit einem Unter-Template-Element-Platzhalter in andere Template-Elemente eingebunden werden. Die Tabelle muss beim Erstellen des Template-Elements ausgewählt werden.

Platzhalter-Syntax

Platzhalter sind an dem $-Zeichen und den geschweiften Klammern erkennbar.

Unter-Template-Element

${Einleitung}

Anstelle dieses Platzhalters wird beispielsweise die Berichtsvorlage mit dem Namen Einleitung eingefügt. Der Name einer Berichtsvorlage muss eindeutig sein. Die Berichtsvorlagen-Tabelle kann aber auch so gefiltert werden (bspw. nach Sprache des angemeldeten Nutzers), dass der Name bei der Auswertung eindeutig ist.

Dateninhalt

${->Name}

Erkennbar an dem Pfeil (->). Hier wird beispielsweise der Inhalt des Feldes Name eingefügt. Die Daten kommen dabei aus dem Datensatz, für den das Formular geöffnet bzw. für den der Bericht gedruckt wird.

${->Kunde->Name}

Es werden auch Verknüpfungsfelder unterstützt. Das obere Beispiel zeigt beispielsweise den Namen des verknüpften Kunden an. Kunde ist hierbei der Name des Verknüpfungsfeldes der aktuellen Tabelle.

${->Kunde->Name|"Kein Kunde verknüpft!"}

Es kann auch ein Defaultwert angegeben werden für den Fall, dass im Datensatz für das Feld kein Wert eingetragen ist.

Funktionsaufruf

${=FunktionsName()}

Erkennbar an dem Gleichheitszeichen (=). Der Server wertet bei Berichten die Funktion report_FunktionsName aus, bei Formularen die Funktion form_FunktionsName. Diese kann in den Skript-Erweiterungen implementiert sein. Das report_-/form_-Präfix sorgt dafür, dass keine Systemfunktionen direkt aufgerufen werden können.

An die Funktion können beliebig viele Parameter übergeben werden (getrennt durch Komma). Die Anzahl der übergebenen Parameter sollte dabei mit der Anzahl der Parameter der implementierten Funktion übereinstimmen um Fehler zu vermeiden. Es gibt dabei 3 Typen von Parametern:

  • Werte (Hochkomma "): ${=FunktionsName("Ein beliebiger String")}
  • Dateninhalte (Pfeil ->): ${=FunktionsName(->Kunde->Name)}
  • Funktionsaufruf (Gleichheitszeichen =): ${=FunktionsName(=AndererFunktionsName())}
Die innere Funktion kann dabei wieder die gleichen Typen von Parametern haben

Das Ergebnis der Funktion sollte gültiges Html sein, das an der Stelle eingefügt wird. Gibt die Funktion stattdessen ein Objekt der Klasse TemplateElement (extra/template/base/TemplateElement.php) zurück, wird dieses an der Stelle eingebunden.

If/Else/Endif

${if =FunktionsName()}...${endif}

${if ->EinDatenFeld}...${endif}

Wertet die Funktion report_FunktionsName/form_FunktionsName bzw. das Feld EinDatenFeld aus. Evaluiert der Wert zu true, wird der Teil zwischen if und endif im Bericht ausgegeben, andernfalls nicht. Zwischen beiden wird auch ein ${else} unterstützt.

Beispiel

Example:

Es wird ein Bericht für die Tabelle Kontakte erstellt. In das Berichts-Element im Editor wird folgender Text eingetragen:

${Rechnung}

Dies bewirkt, dass in dem Bericht der Inhalt des Datensatzes mit Namen Rechnung aus der Berichtsvorlagen-Tabelle eingefügt wird. In diesem ist der Inhalt definiert:

${PersonenDaten}
Rechnung Text Blabla

In dem Datensatz mit Namen PersonenDaten:

${->Anrede} ${->Vorname} ${->Nachname}, geb. ${=formatDate(->GeburtsDatum,"d.m.Y")}

Es werden hier Anrede/Vorname/Nachname aus der Tabelle Kontakte von dem Datensatz genommen, für den der Bericht gedruckt wird. An die Funktion wird als erster Parameter das Geburtsdatum des Kontakts übergeben (aus der Datenbank). Als zweiter Parameter wird direkt der String d.m.Y übergeben. So kann die Funktion für weitere Datumsformate wiederverwendet werden. Sie kann beispielsweise so in einer Erweiterung (ext_report.inc) implementiert sein:

function report_formatDate($date, $format) {
    $stamp = strtotime($date);
    return date($format, $stamp);
}

So hat der Bericht eine klare Struktur, kann direkt mit Html designed werden und die Personendaten können in weiteren Berichten wiederverwendet werden.