What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
Table of Contents
Caching wird verwendet, um display() oder fetch() Aufrufe durch zwischenspeichern (cachen) der Ausgabe in einer Datei zu beschleunigen. Falls eine gecachte Version des Aufrufs existiert, wird diese ausgegeben, anstatt die Ausgabe neu zu generieren. Caching kann die Performance vor allem dann deutlich verbessern, wenn Templates längere Rechenzeit beanspruchen. Weil die Ausgabe von display() und fetch() gecached wird, kann ein Cache verschiedene Templates, Konfigurationsdateien usw. enthalten.
Da Templates dynamisch sind ist es wichtig darauf zu achten, welche Inhalte für für wie lange gecached werden sollen. Wenn sich zum Beispiel die erste Seite Ihrer Website nur sporadisch ändert, macht es Sinn die Seite für eine Stunde oder länger zu cachen. Wenn Sie aber eine Seite mit sich minütlich erneuernden Wetterinformationen haben, macht es möglicherweise keinen Sinn, die Seite überhaupt zu cachen.
Als erstes muss das Caching eingeschaltet werden. Dies erreicht man, indem $caching = 1 (oder 2) gesetzt wird.
Example 14.1. Caching einschalten
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = true; $smarty->display('index.tpl'); ?>
Wenn Caching eingeschaltet ist, wird der Funktionsaufruf display('index.tpl') das Template normal rendern, zur selben Zeit jedoch auch eine Datei mit dem Inhalt in das $cache_dir schreiben (als gecachte Kopie). Beim nächsten Aufruf von display('index.tpl') wird die gecachte Kopie verwendet.
Die im $cache_dir abgelegen Dateien haben einen ähnlichen Namen wie das Template, mit dem sie erzeugt wurden. Obwohl sie eine '.php'-Endung aufweisen, sind sie keine ausführbaren PHP-Skripte. Editieren Sie diese Dateien NICHT!
Jede gecachte Seite hat eine Lebensdauer, die von $cache_lifetime bestimmt wird. Normalerweise beträgt der Wert 3600 Sekunden (= 1 Stunde). Nach Ablauf dieser Lebensdauer wird der Cache neu generiert. Sie können die Lebensdauer pro Cache bestimmen indem Sie $caching auf 2 setzen. Konsultieren Sie den Abschnitt über $cache_lifetime für weitere Informationen.
Example 14.2. '$cache_lifetime' pro Cache einstellen
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = 2; // Lebensdauer ist pro Cache // Standardwert für '$cache_lifetime' auf 5 Minuten setzen $smarty->cache_lifetime = 300; $smarty->display('index.tpl'); // '$cache_lifetime' für 'home.tpl' auf 1 Stunde setzen $smarty->cache_lifetime = 3600; $smarty->display('home.tpl'); // ACHTUNG: die folgende Zuweisung an '$cache_lifetime' wird nicht funktionieren, // wenn '$caching' auf 2 gestellt ist. Wenn die '$cache_lifetime' für 'home.tpl' bereits // auf 1 Stunde gesetzt wurde, werden neue Werte ignoriert. // 'home.tpl' wird nach dieser Zuweisung immer noch eine '$cache_lifetime' von 1 Stunde haben $smarty->cache_lifetime = 30; // 30 seconds $smarty->display('home.tpl'); ?>
Wenn $compile_check eingeschaltet ist, werden alle in den Cache eingeflossenen Templates und Konfigurationsdateien hinsichtlich ihrer letzten Änderung überprüft. Falls eine der Dateien seit der Erzeugung des Cache geändert wurde, wird der Cache unverzüglich neu generiert. Dadurch ergibt sich ein geringer Mehraufwand. Für optimale Performance sollte $compile_check deshalb auf 'false' gesetzt werden.
Example 14.3. '$compile_check' einschalten
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = true; $smarty->compile_check = true; $smarty->display('index.tpl'); ?>
Wenn $force_compile eingeschaltet ist, werden die Cache-Dateien immer neu generiert und das Caching damit wirkungslos gemacht. $force_compile wird normalerweise nur für die Fehlersuche verwendet. Ein effizienterer Weg das Caching auszuschalten wäre, $caching auf 'false' (oder 0) zu setzen.
Mit der Funktion is_cached() kann überprüft werden, ob von einem Template eine gecachte Version vorliegt. In einem Template, das zum Beispiel Daten aus einer Datenbank bezieht, können Sie diese Funktion verwenden, um den Prozess zu überspringen.
Example 14.4. is_cached() verwenden
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = true; if(!$smarty->is_cached('index.tpl')) { // kein Cache gefunden, also Variablen zuweisen $contents = get_database_contents(); $smarty->assign($contents); } $smarty->display('index.tpl'); ?>
Mit der {insert} Funktion können Sie Teile einer Seite dynamisch halten. Wenn zum Beispiel ein Banner in einer gecachten Seite nicht gecached werden soll, kann dessen Aufruf mit {insert} dynamisch gehalten werden. Konsultieren Sie den Abschnitt über insert für weitere Informationen und Beispiele.
Mit der Funktion clear_all_cache() können Sie den gesamten Template-Cache löschen. Mit clear_cache() einzelne Templates oder Cache-Gruppen.
Example 14.5. Cache leeren
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = true; // alle Cache-Dateien löschen $smarty->clear_all_cache(); // nur Cache von 'index.tpl' löschen $smarty->clear_cache('index.tpl'); $smarty->display('index.tpl'); ?>