Inhaltsverzeichnis Weiterführende Möglichkeiten Eigene Smarty-Funktionen erstellen

Eigene Smarty-Funktionen erstellen

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

QuelltextPHP Code:
  1. // benötigtes Skript einbinden
  2. require_once('smarty/plugins/arg_smarty_functions.php');

  3. // neue Funktion definieren
  4. function smarty_function_meineFunktion($params, &$smarty)
  5. {
  6.     if(!$param['timestamp'])  // wenn der Parameter 'timestamp' nicht gesetzt wurde
  7.     {
  8.         $param['timestamp'] = time(); // die aktuelle Zeit verwenden
  9.     }
  10.     $result = date("d.m.Y",$param['timestamp']);

  11.     // am Ende des Skripts wird an die var-Variable das Ergebnis übergeben
  12.     $smarty->assign($params['var'], $result');
  13. }

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.

QuelltextSmarty Code:
  1. {* Aufruf der Funktion *}
  2. {meineFunktion timestamp=1261132764 var="datum_formatiert"}

  3. {* Verwenden des Ergebnisses *}
  4. Die Funktion gab als Ergebnis das Datum {$datum_formatiert} zurück.

Beispiel 2

QuelltextPHP Code:
  1. /**
  2. * Smarty Plugin für Ausgabe von News-Einträgen
  3. *
  4. * Datei: site/Mandant/plugins/smarty/function.get_news.php
  5. *
  6. * Gibt alle Unterseite vom Typ "news/entry" aus.
  7. * Beispiel: {get_news var=VARNAME page=PAGE-Object anzahl=ANZAHL}
  8. */

  9. require_once('smarty/plugins/arg_smarty_functions.php');

  10. function smarty_function_get_news($params, &$smarty)
  11. {
  12.     // Ist Anzahl angegeben?
  13.     $params['anzahl'] ? $params['anzahl'] : 10; // Standard = 10

  14.     // Kinder-Seiten auslesen
  15.     $kinder = $params['page']->getChildren(array('where' => "type='news/entry'",array('limit' => $params['anzahl'])));
  16.    
  17.     // Ergebnis an entsprechende Var-Variable übergeben
  18.     $smarty->assign($params['var'], $kinder);
  19. }
QuelltextSmarty Code:
  1. {* Funktionsaufruf im Template *}
  2. {get_news page=$page anzahl=5 var="news_eintraege"}

  3. {* Ausgabe der News *}
  4. {foreach from=$news_eintraege item="news"}
  5.     {$news->field.name} <br />
  6.    Leider existieren zur Zeit keine News
  7. {/foreach}