Gelegentlich werden in Templates eigene Smarty-Funktionen benötigt, die in der gewünschten Form nicht verfügbar sind.
Eigene Smarty-Funktionen können Verzeichnis
/site/IhrMandant/plugins/smarty/
jeweils als
function.meineFunktion.php
definiert werden (wobei
meineFunktion
für den Namen der Funktion steht).
Beispiel 1
// benötigtes Skript einbinden
require_once('smarty/plugins/arg_smarty_functions.php');
// neue Funktion definieren
function smarty_function_meineFunktion($params, &$smarty)
{
if(!$param['timestamp']) // wenn der Parameter 'timestamp' nicht gesetzt wurde
{
$param['timestamp'] = time(); // die aktuelle Zeit verwenden
}
$result = date("d.m.Y",$param['timestamp']);
// am Ende des Skripts wird an die var-Variable das Ergebnis übergeben
$smarty->assign($params['var'], $result');
}
Alle an die Smarty-Funktion übergebenen Parameter können innerhalb der Funktion über das Array $param verwenden werden. Die Beispiel-Funktion gibt ein formatiertes Datum aus. Als Parameter kann ein gewünschter Unix-Zeitstempel angegeben werden.
{* Aufruf der Funktion *}
{meineFunktion timestamp=1261132764 var="datum_formatiert"}
{* Verwenden des Ergebnisses *}
Die Funktion gab als Ergebnis das Datum {$datum_formatiert} zurück.
Beispiel 2
/**
* Smarty Plugin für Ausgabe von News-Einträgen
*
* Datei: site/Mandant/plugins/smarty/function.get_news.php
*
* Gibt alle Unterseite vom Typ "news/entry" aus.
* Beispiel: {get_news var=VARNAME page=PAGE-Object anzahl=ANZAHL}
*/
require_once('smarty/plugins/arg_smarty_functions.php');
function smarty_function_get_news($params, &$smarty)
{
// Ist Anzahl angegeben?
$params['anzahl'] ? $params['anzahl'] : 10; // Standard = 10
// Kinder-Seiten auslesen
$kinder = $params['page']->getChildren(array('where' => "type='news/entry'",array('limit' => $params['anzahl'])));
// Ergebnis an entsprechende Var-Variable übergeben
$smarty->assign($params['var'], $kinder);
}
{* Funktionsaufruf im Template *}
{get_news page=$page anzahl=5 var="news_eintraege"}
{* Ausgabe der News *}
{foreach from=$news_eintraege item="news"}
{$news->field.name} <br />
{foreachelse}
Leider existieren zur Zeit keine News
{/foreach}