Computer:: Wiki-Smarty

Smarty

Contents

 Smarty die PHP Template Engine

Smarty ist eine in PHP realisierte Template Engine für die Entwicklung zun Pflege von Websites (siehe: WebAuthoring).

Damit wird der Inhalt der Webseiten getrennt von der Darstellung (“Präsentation”) gehalten und dadurch eine bessere Verwaltung (Site Management) möglich. Smarty erfreut sich einer sehr grossen Community. Der ursprüngliche Entwickler ist Andrei Zmievski. Infos gibt es bei http://smarty.php.net

Die Template-Engine patTemplate (http://www.php-tools.net) wird für den 2003 neu gestalteten Web-Auftritt (Portal) von 1und1.com verwendet.

 Meine Smarty-Installation

  • Definitive Software Library ID: Smarty
  • Version: 2.4.2 (vom 11.02.2003)
  • Bezugsquelle: Freshmeat http://freshmeat.net/projects/smarty/ http://smarty.php.net/
  • Installationsdatum: 11.05.2003
  • Plattform: Entwicklungssystem (Notebook)
  • Installations-Ordner: d:\bin\php\smarty\….
  • Plugin-Ordner: d:\bin\php\smarty\plugins
  • Systemvoraussetzungen: PHP

 Konfiguration

  • In D:\bin\php\smarty\Smarty.class.php sind festverdrahtete Pfade
  • In D:\bin\php\smarty\plugins\function.filemtime.php ist ein festverdrahteter Pfad
  • In der PHP-Konfigurationsdatei D:\bin\php\PHP.INI wird der include_path wie folgt ergänzt: include_path = “.;d:\bin\php\pear;d:\bin\php\smarty;.\templates;.\plugins;.\include”

 Meine Website mit Smarty

Für meine WebsiteTraditionell setze ich Smarty ein. Da ich beim WebProvider keine PHP-Unterstützung habe, setzte ich Smarty auf meinem Entwicklungssystem (Notebook) ein und erzeuge daraus statische HTML-Seiten, die ich von Zeit zu Zeit hochlade.

 Die Smarty-Dateien (*.php)

Die Smarty-Dateien meiner Website liegen auf meinem Entwicklungsrechner (Notebook) in: d:\var\www\htdocs\smarty.kr8.de
Für jede Web-Seite befindet sich dort eine kleine PHP-Datei (z.B. index.php, humor.php, methods.php), in der die Template-Parameter gesetzt werden und die Template dann aufgerufen wird.

Diese Template-Parameter sind:

  • Diverse Parameter (Titel, Autor, Datum, Symbol, Banner,…)
  • Article: Aufruf des eigentlichen Textbausteins (z.B. “humor.inc”)
  • Menu: Ein Array, das die zu generierende Menüleiste definiert.

Als letzte Zeile erfolgt der Aufruf der Template, das ist standardmässig krachtweb.tpl.

 Welche Templates (*.tpl) verwende ich?

  • krachtweb.tpl: Mein Standard
  • krachtweb_popup.tpl: Für die kleinen Popup-Seiten (z.B. im Bereich “Ostern”)
  • krachtweb_print.tpl: Zur Erzeugung “druckerfreundlicher Varianten” einer Seite (z.B. beim CV)
  • krachtweb_tree.tpl: Für Seiten mit spezieller Tree-Navigation (z.B. im Bereich “Ostern”)

Die Templates befinden sich in d:\var\www\htdoc\smarty.kr8.de\templates

 Textbausteine (*.inc)

Die Textbausteine sind Dateien, die ein HTML-Fragment mit dem eigentlichen Text enthalten (z.B. “humor.inc”) und befinden sich in d:\var\www\htdocs\smarty.kr8.de\templates.

 Die dynamische Website

Damit sind wir fertig. Die dynamische Website kann nun (auf dem Entwicklungssystem) betrachtet werden. Zum Beispiel:

Leider besteht auf diese Seiten kein Zugriff vom Internet aus.

 Die statische Website

Zur Generierung der statischen HTML-Seiten wird der PHP Command Line Interpreter “CLI” verwendet. Z.B.:
cd \var\www\htdocs\smarty.kr8.de

 \php\cli\php -f index.php > \var\www\www.kr8.de\htdocs\index.htm
 \php\cli\php -f humor.php > \var\www\www.kr8.de\htdocs\humor.htm
 \php\cli\php -f methods.php > \var\www\www.kr8.de\htdocs\methods.htm 

Die so erzeugten statischen HTML-Seiten werden in \var\www\www.kr8.de\htdocs abgelegt und können dort zur Kontrolle betrachtet werden. Zum Beispiel:

Leider besteht auf diese Seiten kein Zugriff vom Internet aus.

 Upload der statischen Seiten zum Web-Provider

Mit einem FTP-Client werden diese statischen HTML-Seiten nun zum WebProvider hochgeladen und können dort öffentlich betrachtet werden. Zum Beispiel:

 Selektives Generieren der statischen HTML-Seiten mit einem Makefile

Das Generieren aller ca. 120 statischen HTML-Seiten dauert etwas lange. Wenn man jeweils nur das neu generiert, was von Änderungen betroffen war, geht es viel schneller. Dazu verwende ich das bewährte Unix-BuildTool Make.

Das produktive Makefile für meine Website ist:

  • Makefile: D:\home\kracht\www\www.kr8.de\htdocs\makefile

Das Generieren der statischen HTML-Seiten geschiet durch eine Aufruf der Progamms Make durch ein BAT-File:

  • BAT-File: D:\home\kracht\www\www.kr8.de\htdocs\makeweb.bat

Der prinzipielle Aufbau meines Makefiles ist wie folgt:

TEMPL = /var/www/www.kr8.de/smarty/templates/
PHP	= /var/www/www.kr8.de/smarty

# first target is the default target of the make command

all: krachtweb

krachtweb: index.htm humor.htm methods.htm

index.htm:	  ${TEMPL}index.inc ${PHP}index.php ${TEMPL}krachtweb.tpl
	\php\cli\php -f ${PHP}index.php > index.htm

humor.htm:		 ${TEMPL}humor.inc ${PHP}humor.php ${PHP}menu_freizeit.inc ${TEMPL}krachtweb.tpl
	\php\cli\php -f ${PHP}humor.php > humor.htm

methods.htm:		 ${TEMPL}methods.inc ${PHP}methods.php ${PHP}menu_humor.inc ${TEMPL}krachtweb.tpl
	\php\cli\php -f ${PHP}methods.php > methods.htm

03.04.2004 Menü-Ausprägungen für alle Seiten ausgelagert in INC-Dateien “menu_xyz.inc”

03.04.2004 Datum der letzen Änderung wird mithilfe eines Smarty-Plugins übernommen

FileMtime Plugin (Plugin-Ordner: d:\php\smarty\plugins)

<?php
/*
 * Smarty plugin
 * -------------------------------------------------------------
 * Type:	  function
 * Name:	  filemtime
 * Purpose:  get the lastmodified date and time from a file
 *
 * Example:  {filemtime file='hugo.inc'}
 * -------------------------------------------------------------
 */
function smarty_function_filemtime($params, &$this)
{
	 extract($params);

	 if (!isset($file)) {
		  $this->trigger_error("filemtime: missing 'file' parameter");
		  return;
	 }
	 if($file == '') {
		  return;
	 }
	 $file = "d:/home/kracht/www/smarty.kr8.de/templates/" . $file;
	 $html = date('Y-m-d H:i:s', filemtime($file));
	 return $html;
}
?>

Einsatz des Plugins in der Smarty-Template

  <address>Dietrich Kracht. Copyright © 2004. All rights reserved. Page last modified: {filemtime file="$Article"}
  </address>

— Main.DietrichKracht – 25 Mar 2004