>> Inhaltsverzeichnis >> Anleitung für Entwickler

neue Funktionen

Hinweis: Das folgende Kapitel beschreibt zusätzliche Funktionen, welche Ihnen im Yana Framework zur Verfügung stehen und nicht zur Grundfunktionalität der Smarty Template Engine gehören. Die Grundfunktionen der Smarty Template Engine sind in der Dokumentation auf http://smarty.net/docs.php beschrieben.

captcha

[%captcha [ id="<string>" ] %]

Attribut Typ erforderlich Defaultwert Beschreibung
id string nein n/a Wert für das Attribut "id" des Tags "input"

Die Funktion "captcha" wird verwendet, um eine Grafik anzuzeigen, welches Text enthält, den der Besucher lesen und in das daneben eingeblendete Eingabefeld eingeben muss. Dies ist eine allgemein gebräuchliche Variante zum Schutz vor Spam.

Der Parameter "id" ist optional. Er kann beispielsweise verwendet werden, wenn eine Beschreibung in einem "label" angezeigt werden soll.

1. Beispiel:

[%captcha%]


Abbildung: Darstellung im Browser

2. Beispiel, mit Parameter "id":

<label for="myCaptcha">Bitte geben Sie den Text auf dem Bild ein</label>
[%captcha id="myCaptcha"%]

Weitere Hinweise finden Sie auch im Kochbuch für Entwickler, Kapitel "Verwenden eines CAPTCHA".

create

[%create template="<string>" file="<string>" table="<string>" [ where="<string>" ] [ desc="<boolean>" ] [ sort="<string>" ] [ page="<integer>" ] [ entries="<integer>" ] [ titles="<boolean>" ] [ on_new="<string>" ] [ on_edit="<string>" ] [ on_delete="<string>" ] [ on_search="<string>" ] %]

Attribut Typ erforderlich Defaultwert Beschreibung
template string ja n/a Name des Templates, welches zum Generieren der GUI verwendet werden soll. Erlaubte Werte sind:
view_seperated, view_details, view, new, edit, search
file string ja n/a Pfad der Strukturdatei welche verwendet werden soll.
table string ja n/a Name der Tabelle, welche verwendet werden soll
show string nein n/a durch Kommata getrennte Liste von Spalten der Tabelle, welche in der Ausgabe angezeigt werden sollen (Kleinschreibung verwenden)
hide string nein n/a durch Kommata getrennte Liste von Spalten der Tabelle, welche in der Ausgabe NICHT angezeigt werden sollen (Kleinschreibung verwenden)
where string nein <empty> wird verwendet um die WHERE-Klausel für die SQL-Anfrage zu generieren.
Syntax: <FELDNAME1>=<WERT1>[,<FELDNAME2>=<WERT2>[,...]]
desc boolean nein false Gibt an, ob die Einträge aufsteigend (false) oder absteigend (true) sortiert werden sollen.
sort string nein <primary key> Name der Spalte, nach welcher die Einträge sortiert werden sollen
page integer nein 0 Nummer des ersten Eintrags der angezeigt werden soll
entries integer nein 5 Anzahl der insgesamt anzuzeigenden Einträge
titles boolean nein true Legt fest, ob Attributnamen angezeigt werden sollen oder nicht.
on_new string nein n/a Name der Aktion welche ausgelöst werden soll wenn ein neuer Eintrag gespeichert werden soll
on_edit string nein n/a Name der Aktion welche ausgelöst werden soll wenn geänderte Einträge gespeichert werden sollen
on_delete string nein n/a Name der Aktion welche ausgelöst werden soll wenn ausgewählte Einträge gelöscht werden sollen
on_search string nein n/a Name der Aktion welche ausgelöst werden soll um eine Suchanfrage zu bearbeiten und die Trefferliste zu erzeugen
on_download string nein download_file Name der Aktion welche ausgelöst werden soll wenn der Nutzer eine Datei oder ein Bild herunterladen möchte
layout int nein 0 Sollte ein Formular mehrere Darstellungsmöglichkeiten bieten, so können Sie mit diesem Parameter zwischen diesen wechseln.

Die Funktion "create" generiert automatisch eine GUI für eine gewählte Datenbank. Voraussetzung ist das Vorhandensein einer gültigen Strukturdatei, welche die Datenbank beschreibt.

Beispiel:

[%create template="edit" file="database.config" table="bookstore"%]

Ein Beispiel für eine Funktion, zum Download einer Datei (Argument "on_download"):

<?php 
function myDownload($ARGS)
{
   if ($source DbBlob::getFileId() === false) {
       return false;
   }
   // Download einer Datei:
   if (preg_match('/\.gz$/'$source)) {
       $dbBlob = new DbBlob($source);
       $dbBlob->read();
       header('Content-Disposition: attachment; filename=' $dbBlob->getPath());
       header('Content-Length: ' $dbBlob->getFilesize());
       header('Content-type: ' $dbBlob->getMimeType());
       print $dbBlob->get();
       // Download einer Grafik:
   } else {
       $image = new Image($source);
       $image->outputToScreen();
   }
   exit;
}
?>

Achtung! Diese Funktion prüft nicht automatisch, ob der Nutzer die ausgewählte Datei im Sinne der Semantik Ihres Programms herunterladen "darf". Dies ist leider auch gar nicht möglich, ohne die Kriterien zu kennen, welche Sie innerhalb Ihres Programms dafür anwenden. Daher bleibt es an dieser Stelle Ihnen überlassen zu verifizieren, dass der Benutzer die notwendige Berechtigung besitzt, um die gewünschte Datei einzusehen.

embeddedTags

[%embeddedTags [ show="<string>" ]  [ hide="<string>" ] %]

Attribut Typ erforderlich Defaultwert Beschreibung
show string nein * eine durch Kommata getrennte Liste der Tags,
die angezeigt werden sollen
hide string nein n/a eine durch Kommata getrennte Liste der Tags,
die ausgeblendet werden sollen

Die Funktion "embeddedTags" generiert automatisch eine Schaltflächen, mit denen der Gast Ihrer Webseite beim Schreiben eines neuen Eintrags Text formatieren kann (fett, kursiv, etc.).

Die Liste "show" kann verwendet werden, um Tags festzulegen, welche angezeigt werden sollen und die Liste "hide" kann man benutzen, wenn Sie möchten, dass ganz bestimmte Tags nicht dargestellt werden.

Sie können in der Liste "show" mit dem Zeichen "-" Zeilenumbrüche und mit dem Zeichen "|" Trennstriche in die Ausgabe einfügen.

Beispiel:

<textarea id="text"></textarea>


Abbildung: Darstellung der Tag-Leiste (mit allen Tags)

<!-- Alle Tags einblenden -->
[%embeddedTags%]
<!-- Die Tags "u", "i" und "b" einblenden -->
[%embeddedTags show="b,u,i"%]
<!-- Alle Tags außer "url" und "mail" einblenden -->
[%embeddedTags hide="url,mail"%]
<!-- Die Tags "u","i","b", einen Trennstrich und dann den Tag "url" anzeigen -->
[%embeddedTags show="u,i,b,|,url"%]

import

[%import [preparser="true"] file="<string>"%]

[%import [preparser="true"] id="<string>"%]

Attribut Typ erforderlich Defaultwert Beschreibung
file string ja n/a Pfad der einzufügenden Datei
preparser boolean nein false bestimmt ob die Datei vor (true) oder während (false) des Parsens des Templates importiert werden soll

Oder alternativ mit folgenden Parametern:

Attribut Typ erforderlich Defaultwert Beschreibung
id string ja n/a Id des einzufügenden Templates
preparser boolean nein false bestimmt ob die Datei vor (true) oder während (false) des Parsens des Templates importiert werden soll

Die Funktion "import" ersetzt die verschiedenen ursprünglichen Funktionen zum Einfügen von Dateien durch eine einheitliche Funktion. Sie unterscheidet sich außerdem in der Art, wie die Dateien behandelt werden. Die Funktion "import" behandelt die zu importierende Datei wie ein eigenständiges Template. Dieses hat mehrere Vorteile: das eingefügte Template unterliegt bspw. den selben Sicherheitseinschränkungen wie das Basistemplate. Außerdem (und noch viel wichtiger:) sorgt dieses Vorgehen dafür, dass die Korrektur enthaltener Pfadangaben korrekt arbeiten kann.

Der Parameter "file" gibt den Namen der Datei an, welche importiert werden soll.

Alternativ kann der Parameter "id" verwendet werden, um statt den Pfad und Dateinamen fest im Template vorzugeben, die Id des Templates anzugeben. Das Framework bestimmt den zu der Id passenden Dateinamen zur Laufzeit automatisch. Dies hat den Vorteil, dass die Datei umbenannt oder in einen anderen Pfad verschoben werden kann, ohne dass die Verweise auf diese Datei in allen anderen Templates korrigiert werden müssen.

Anwendungsbeispiel: angenommen Sie haben ein Template "a.html" für den Skin "default" definiert und dieser importiert das Template "b.html". Nun möchten Sie einen neuen Skin anlegen. In diesem Skin wollen Sie den Inhalt der Datei "b.html" ändern, aber den Inhalt der Datei "a.html" unverändert lassen.
1. Fall: Falls Sie im Skin "default" das Template "b.html" über den Parameter "file" importiert haben, dann können Sie "b.html" in Ihrem neuen Skin nicht ändern, ohne den Pfad in "a.html" zu ändern. Das bedeutet, Sie müssten in Ihrem neuen Skin auch die Datei "a.html" anpassen.
2. Fall: Falls Sie im Skin "default" dem Template "b.html" eine Id (zum Beispiel "b") zugewiesen haben und das Template über den Parameter "id" importiert haben, dann können Sie in Ihrem neuen Skin die Id des Template "b" mit dem Pfad einer anderen Datei überschreiben, welche nur für diesen Skin verwendet wird. Dadurch müssen Sie den Pfad im Template "a.html" nicht ändern und können das Template unverändert lassen.
Hinweis: Das Zuweisen von Ids zu Dateien erledigen Sie über die Konfigurationsdateien (*.config) im Verzeichnis des jeweiligen Templates.

Das Flag "preparser" bestimmt, wann eine Datei importiert werden soll: BEVOR oder WÄHREND der Parser das Template abarbeitet. Wird es gesetzt, wird die Datei VOR dem eigentlichen Parsen eingefügt. Das Flag "preparser" sollte beispielsweise immer dann verwendet werden, wenn das importierte Template auf Variablen zugreifen muss, welche durch das Basistemplate gesetzt werden. Klassisches Beispiel sind Templates, welche innerhalb des Körpers von Schleifen importiert werden. ("foreach", "section") Diese benötigen das Flag "preparser", falls sie auf die Schleifenvariablen zugreifen können müssen. Alternativ können Sie der Anweisung "Import" eine Liste aller Variablen übergeben, auf welche Sie innerhalb des Templates zugreifen müssen.

Achtung! Wird der Parameter "preparser" verwendet, so wird das importierte Template nicht einzeln geparst, übersetzt und im Cache gespeichert, sondern in den Quellcode des Templates kopiert, welches die Import-Anweisung enthält. Es wird zur Laufzeit nicht geprüft, ob sich der Inhalt des importierten Templates seit dem letzten Aufruf geändert hat. Wenn Sie das importierte Template ändern, müssen Sie daher den Template-Cache explizit leeren, damit die Änderungen wirksam werden.

1. Beispiel, mit Parameter "file":

Datei "hello_world.html"
Hello World!

Datei "template.html"
<p>[%import file="hello_world.html"%]</p>

2. Beispiel, mit Parameter "id":

Datei "default.config"
<hello>
  <file>hello_world.html</file>
</hello>

Datei "template.html"
<p>[%import id="hello"%]</p>

3. Beispiel, zusätzliche Parameter:

Datei "hello_world.html"

[%if $foo%]
[%$bar%]
[%/if%]

Datei "template.html"
<p>[%import file="hello_world.html" foo=true bar="Hello World!"%]</p>

Ausgabe (in allen 3 Beispielen):

<p>Hello World!</p>

preview

[%preview [ width="<integer>" ] [ height="<integer>" ] %]

Attribut Typ erforderlich Defaultwert Beschreibung
width integer nein 380px Breite in Pixel
height integer nein 50px Höhe in Pixel

Die Funktion "preview" erzeugt ein Vorschaufenster auf einen Eintrag, welchen der Besucher geschrieben hat.

Im Text enthaltene Smilies und Tags werden dabei grafisch dargestellt. Dadurch hat der Besucher die Möglichkeit vor dem Abschicken des Formulars zu prüfen, wie sein Beitrag aussehen wird.

Beim Aufruf der Funktion werden automatisch die erforderlichen JavaScript-Dateien eingebunden. Außerdem wird eine Schaltfläche mit der Aufschrift "Vorschau" erstellt. (In der englischen Version lautet die Beschriftung "Preview".) Beim Anklicken wird oberhalb dieser Schaltfläche ein Fenster eingeblendet, welches die Vorschau zeigt.

Beispiel:

<textarea id="text"></textarea>
[%preview%]


Abbildung: Die Vorschau wird durch Anklicken der Schaltfläche
"Vorschau" über einen "AJAX HTTP-Request" vom Server geladen


Abbildung: Darstellung der Vorschau im Browser

Die Attribute "width" und "height" geben Breite und Höhe des Vorschaufensters an. Diese Werte werden als CSS-Anweisungen umgesetzt. Wenn Sie diese verwenden möchten, achten Sie daher bitte darauf, dass Sie eine Maßeinheit (zum Beispiel "px" für Pixel) angeben müssen. Prozentuale Angaben, wie "70%" sind ebenfalls erlaubt. Zahlen ohne Maßeinheit, wie "70" werden jedoch im Browser möglicherweise fehlerhaft dargestellt.

Die Angaben beziehen sich nicht auf die gesamte Größe des Vorschaufensters, sondern sinnigerweise auf den darin dargestellten Text. Die folgende Abbildung demonstriert dies:


Abbildung: Darstellung der Randbereiche

Der hier lila gefärbte Bereich ist der, dessen Größe über die Attribute "width" und "height" festgelegt wird. Der hellgrüne Bereich ist die Gesamtgröße des Feldes. Der Platz, welcher für die Überschrift benötigt wird, ist hellblau dargestellt. Der Rahmen ist hier violett angedeutet. Die Gesamtgröße des Fensters richtet sich also nach den Werten der Attribute "width" und "height", zuzüglich der Überschrift, des Rahmens (border) und des Randbereichs (margin) des Fensters.

printArray

[%printArray value="<array>" %]

Attribut Typ erforderlich Defaultwert Beschreibung
value array ja n/a ein Array, welches als String ausgegeben werden soll

Diese Funktion wandelt ein (eventuell mehrdimensionales) Array in einen String um und gibt diesen aus. Das Array wird im SML-Format dargestellt. Dies kann unter anderem für das Debugging von Templates interessant sein, um herauszufinden welchen Namen eine gesuchte Variable hat.

• Hinweis: Ab Version 2.9.3 des Yana Frameworks unterstützt diese Funktion Syntaxhervorhebung bei der Ausgabe.

Beispiel:

[%printArray value=$LANGUAGE%]


Abbildung: kurzer Auszug aus der Ausgabe

printUnorderedList

[%printUnorderedList value="<array>" [ keys_as_href="<bool>" ] [ layout="<int>" ] %]

Attribut Typ erforderlich Defaultwert Beschreibung
value array ja n/a ein Array, welches als Liste ausgegeben werden soll
keys_as_href bool nein false gibt an, ob Links erzeugt werden sollen
layout int nein 1 lässt Sie zwischen 3 alternativen Layouts (1, 2 und 3) für Ihr Menü wählen

Diese Funktion wandelt ein (eventuell mehrdimensionales) Array in eine unsortierte Liste im HTML-Format um und gibt diese aus. Es wird der Tag "ul" verwendet.

Man kann diese Funktion verwenden, um Baummenüs zu erzeugen. Wahlweise können in diesem Menü Links erzeugt werden. Dazu verwenden Sie bitte die URLs als Schlüssel des Arrays und die Beschriftung als Werte. Außerdem setzen Sie den Parameter "keys_as_href" auf "true".

1. Beispiel – ein Array als Baummenü darstellen:

[%printUnorderedList value=$LANGUAGE%]

 


Abbildung: kurzer Auszug aus der Ausgabe

 

2. Beispiel – ein Baummenü mit Links ausgeben:

<?php 
$A = array(
    '1.html' => 'Link',
    'Menü 1' => array(
        '2_1.html' => '1. Eintrag',
        '2_2.html' => '2. Eintrag',
        'Menü 2' => array(
            '2_3_1.html' => '1. Eintrag',
            '2_3_2.html' => '2. Eintrag'
        ),
    ),
    'Menü 3' => array(
        '3_1.html' => '1. Eintrag',
        '3_2.html' => '2. Eintrag',
        '3_2.html' => '3. Eintrag'
    ),
);
$YANA->setVar('A'$A);
?>

[%printUnorderedList value=$A keys_as_href="true"%]

 


Abbildung: Darstellung als Baummenü mit Links

3. Beispiel – weitere Layouts:

[%printUnorderedList value=$A layout=2 keys_as_href="true"%]


Abbildung: Darstellung als vertikales Baummenü

[%printUnorderedList value=$A layout=3 keys_as_href="true"%]


Abbildung: Darstellung als horizontales Baummenü

Die Schlüssel werden fett gedruckt und die Werte kursiv - dies lässt sich jedoch per CSS ändern. Es werden folgende CSS-Klassen verwendet:

rss

[%rss [ image="<string>" ] %]

Attribut Typ erforderlich Defaultwert Beschreibung
image string nein n/a das Icon, auf welches der Besucher klicken kann um den RSS-Feed zu sehen.

Diese Funktion erzeugt Hyperlinks, zu den verfügbaren RSS-Feeds einer Webseite.

Das Argument "image" kann verwendet werden, um ein Icon auszuwählen. Klickt der Nutzer auf diesen Link, so wird die entsprechende Datei geöffnet. Die Liste der RSS-Feeds wird im Quellcode der Anwendung erzeugt. Siehe dazu auch das Kochbuch für Entwickler, Kapitel: "Sonstige Funktionen".

• Tipp: Auch wenn Sie die Hyperlinks nicht erzeugen, können Ihre Besucher die verfügbaren RSS-Feeds Ihrer Webseite trotzdem lesen, weil diese Links zusätzlich im Header der Datei zu finden sind. Diese Informationen kann der Browser des Besuchers, sofern er dazu in der Lage ist, verwenden, um Ihrem Besucher das Lesen der Feeds zu ermöglichen. Diese Variante ist für Ihre Gäste allerdings umständlicher und sollte daher vermieden werden.

Beispiel:

[%rss%]

RSS
Abbildung: Ausgabe der Funktion

Beispiel – einen Feed zur Ausgabe hinzufügen:

<?php 
// Der Wert 'mein_rss' ist der Name der Funktion, welche den RSS-Feed ausgibt
RSS::publish('mein_rss');
?>

• Hinweis: In den mitgelieferten Skins werden die Hyperlinks auf vorhandene RSS-Feeds automatisch erzeugt, so dass Sie diese Funktion in der Regel nicht selbst benötigen, außer wenn Sie einen eigenen Skin schreiben. In diesem Fall sollten Sie die Hyperlinks in den Kopfbereich der Seite einbinden, wo diese für Besucher leicht zugänglich sind.

sizeOf

[%sizeOf value="<mixed>" [ assign="<string>" ] %]

Attribut Typ erforderlich Defaultwert Beschreibung
value mixed ja n/a skalarer Wert oder Array, dessen Länge bestimmt werden soll
assign string nein n/a Name der Template-Variable in welcher das Ergebnis zu speichern ist

Die Funktion "sizeOf" gibt die Länge eines Arrays oder Strings als Zahl zurück. Falls der Parameter "assign" angegeben wird, so wird der Rückgabewert in der Variable mit diesem Namen gespeichert und die Funktion liefert kein Ergebnis zurück.

Beispiel:

<td colspan="[%sizeOf value=$cols%]"> ... </td>

Beispiel mit "assign":

[%sizeOf value=$cols assign="foo"%] <td colspan="[%$foo%]"> ... </td>

smilies

[%smilies [ width="<integer>" ] %]

Attribut Typ erforderlich Defaultwert Beschreibung
width integer nein 1 Anzahl der Spalten der Tabelle

Die Funktion "smilies" generiert automatisch eine Tabelle aller verfügbaren Emoticons / Smilies, mit einem Link zum Einfügen in das angegebene Eingabefeld.

Beispiel:

<textarea id="text"></textarea>
[%smilies width="5"%]


Abbildung: Darstellung der Smilies (5 pro Zeile)

smlLoad

[%smlLoad file="<string>" [ section="string" ] [ scope="string" ] %]

Attribut Typ erforderlich Defaultwert Beschreibung
file string ja n/a Anzahl der Spalten der Tabelle
section string nein n/a ID eines Input- oder Textarea-Tags
scope string nein local gültige Werte: "local", "global", "parent", "template_vars"
global boolean nein false deprecated

Diese Funktion bietet die gleiche Schnittstelle wie die Smarty-Funktion "config_load". Allerdings arbeitet diese Funktion mit SML-Dateien mit den Dateiendungen "*.sml", "*.cfg" oder "*.config".

Anders als die herkömmlichen Konfigurationsdateien der Smarty-Engine, dürfen SML-Dateien mehrdimensionale Array-Definitionen enthalten.

Außerdem darf das Argument "scope" den Wert "template_vars" besitzen, welcher bewirkt, dass die Variablen der SML-Datei als Templatevariablen verwendet werden  - damit ist es möglich auf mehrdimensionale Arrays in gewohnter Weise zuzugreifen. Dieses Feature gibt es nur für smlLoad() und nicht für config_load().

Beispiel:

Im Verzeichnis "skins/.config" liegt die Datei "foo.sml". Sie hat folgenden Inhalt:

<TEST>
    <A>1</A>
    <B>
        <C>2</C>
    </B>
</TEST>

Im Template steht:

[%smlLoad file="foo.sml" section="TEST.B" scope="template_vars"%]
[%$C%]

Ausgabe: 2

[%smlLoad file="foo.sml" section="TEST.B"%]
[%#C#%]

Ausgabe: 2

[%smlLoad file="foo.sml" scope="template_vars"%]
[%$TEST.B.C%]

Ausgabe: 2

sml_load

Der Funktionsname "sml_load" ist ein Alias für die Funktion "smlLoad". Sie können beide Bezeichnungen alternativ verwenden.

Zur Beschreibung dieser Funktion.

varDump

[%varDump var="<mixed>" %]

• Hinweis: Diese Funktion dient ausschließlich dem Debugging. Sie steht nur zur Verfügung, wenn das Framework im Debugmodus betrieben wird. Ist dieser Modus deaktiviert, wird beim Versuch die Funktion aufzurufen ein Fehler erzeugt. Dies dient der Sicherheit Ihrer Anwendung.

Attribut Typ erforderlich Defaultwert Beschreibung
var mixed ja n/a Wert der ausgegeben werden soll

Die Funktion "varDump" gibt den Inhalt einer Variablen aus.

Beispiel:

[%varDump value=$INSTALLED_LANGUAGES%]

Ausgabe:

array ( 'de' => 1, 'en' => 1 )

Autor: Thomas Meyer, www.yanaframework.net