Smarty Icon

You may use the Smarty logo according to the trademark notice.

Smarty Template Engine Smarty Template Engine

For sponsorship, advertising, news or other inquiries, contact us at:

Sites Using Smarty

Advertisement

Ressourcen

Ein Template kann aus verschiedenen Quellen bezogen werden. Wenn Sie ein Template mit 'display()' ausgeben, die Ausgabe mit 'fetch()' in einer Variablen speichern oder innnerhalb eines Template ein weiteres Template einbinden, müssen Sie den Ressourcen-Typ, gefolgt von Pfad und Template-Namen angeben. Wenn kein Resourcetyp angegeben wird, wird $default_resource_type verwendet.

Templates aus dem '$template_dir'

Templates aus dem '$template_dir' benötigen normalerweise keinen Ressourcen-Typ, es wird jedoch empfohlen 'file:' zu verwenden. Übergeben Sie einfach den Pfad, in dem sich das Template relativ zu '$template_dir' befindet.

Example 15.6. Templates aus '$template_dir' verwenden

      
      // im PHP-Skript
      $smarty->display("index.tpl");
      $smarty->display("admin/menu.tpl");
      $smarty->display("file:admin/menu.tpl"); // entspricht der vorigen Zeile
      
      
      {* im Smarty Template *}
      {include file="index.tpl"}
      {include file="file:index.tpl"} {* entspricht der vorigen Zeile *}

Templates aus beliebigen Verzeichnissen

Templates ausserhalb von '$template_dir' benötigen den 'file:' Ressourcen-Typ, gefolgt von absolutem Pfadnamen und Templatenamen.

Example 15.7. Templates aus beliebigen Verzeichnissen benutzen

      
      // im PHP-Skript
      $smarty->display("file:/export/templates/index.tpl");
      $smarty->display("file:/path/to/my/templates/menu.tpl");
      
      
      {* im Smarty Template *}
      {include file="file:/usr/local/share/templates/navigation.tpl"}

Windows Dateipfade

Wenn Sie auf einer Windows-Maschine arbeiten, enthalten absoluten Dateipfade normalerweise den Laufwerksbuchstaben (C:). Stellen Sie sicher, dass alle Pfade den Ressourcen-Typ 'file:' haben, um Namespace-Konflikten vorzubeugen.

Example 15.8. Templates aus Windows Dateipfaden verwenden

       
       // im PHP-Skript
       $smarty->display("file:C:/export/templates/index.tpl");
       $smarty->display("file:F:/path/to/my/templates/menu.tpl");
       
       
       {* im Smarty Template *}
       {include file="file:D:/usr/local/share/templates/navigation.tpl"}

Templates aus anderen Quellen

Sie können Templates aus jeder für PHP verfügbaren Datenquelle beziehen: Datenbanken, Sockets, LDAP, usw. Dazu müssen sie nur ein Ressource-Plugin schreiben und registrieren.

Konsultieren Sie den Abschnitt über Ressource-Plugins für mehr Informationen über die Funktionalitäten, die ein derartiges Plugin bereitstellen muss.

Note

Achtung: Sie können die interne file Ressource nicht überschreiben. Es steht Ihnen jedoch frei, ein Plugin zu schreiben, das die gewünschte Funktionalität implementiert und es als alternativen Ressource-Typ zu registrieren.

Example 15.9. Eigene Quellen verwenden

      
      // im PHP-Skript
      
      
      // definieren Sie folgende Funktion in Ihrer Applikation
      function db_get_template ($tpl_name, &tpl_source, &$smarty_obj)
      {
      // Datenbankabfrage um unser Template zu laden,
      // und '$tpl_source' zuzuweisen
      $sql = new SQL;
      $sql->query("select tpl_source
      from my_table
      where tpl_name='$tpl_name'");
      if ($sql->num_rows) {
      $tpl_source = $sql->record['tpl_source'];
      return true;
      } else {
      return false;
      }
      }
      
      function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
      {
      
      // Datenbankabfrage um '$tpl_timestamp' zuzuweisen
      $sql = new SQL;
      $sql->query("select tpl_timestamp
      from my_table
      where tpl_name='$tpl_name'");
      if ($sql->num_rows) {
      $tpl_timestamp = $sql->record['tpl_timestamp'];
      return true;
      } else {
      return false;
      }
      }
      
      function db_get_secure($tpl_name, &$smarty_obj)
      {
      
      // angenommen alle Templates sind sicher
      return true;
      }
      
      function db_get_trusted($tpl_name, &$smarty_obj)
      {
      
      // wird für Templates nicht verwendet
      }
      
      
      // Ressourcen-Typ 'db:' registrieren
      $smarty->register_resource("db", array("db_get_template",
      "db_get_timestamp",
      "db_get_secure",
      "db_get_trusted"));
      
      
      // Ressource im PHP-Skript verwenden
      $smarty->display("db:index.tpl");
      
      
      {* Ressource in einem Smarty Template verwenden *}
      {include file="db:/extras/navigation.tpl"}

Standard Template-Handler

Sie können eine Funktion definieren, die aufgerufen wird, wenn ein Template nicht aus der angegeben Ressource geladen werden konnte. Dies ist z. B. nützlich, wenn Sie fehlende Templates on-the-fly generieren wollen.

Example 15.10. Standard Template-Handler verwenden

      <?php
      
      // fügen Sie folgende Zeilen in Ihre Applikation ein
      
      function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp, &$smarty_obj)
      {
      if( $resource_type == 'file' ) {
      if ( ! is_readable ( $resource_name )) {
      
      // erzeuge Template-Datei, gib Inhalte zurück
      $template_source = "This is a new template.";
      $template_timestamp = time();
      $smarty_obj->_write_file($resource_name, $template_source);
      return true;
      }
      } else {
      
      // keine Datei
      return false;
      }
      }
      
      
      // Standard Handler definieren
      $smarty->default_template_handler_func = 'make_template';
      ?>