phptal:cache
Durch dieses Attribut wird ein komplettes Element, also Auszeichnung samt Attributen und Inhalt, auf der Festplatte gepuffert und erst dann wieder neu interpretiert, wenn die Pufferzeit abgelaufen ist.
Eine solche Pufferung lohnt sich nur für Elemente, die sehr komplexe Ausdrücke, Makros aus externen Dateien, oder PHP-Ausdrücke/Objekte mit Datenbankzugriffen enthalten. Ansonsten sind nichtgepufferte Vorlagen genauso schnell.
Der Inhalt dieses Attributs ist eine Zeitspanne (wie lange soll das Element gepuffert werden), die als Zahl mit 'd
', 'h
', 'm
' oder 's
' als Einheit geschrieben wird.
<div class="footer" phptal:cache="3h">…</div>
<div>
wird maximal alle 3 Stunden einmal ausgeführt.
Der Zeitspanne kann wahlweise ein "per
"-Parameter folgen, der festlegt, ob der Puffer geteilt wird. In der Grundeinstellung wird ein Elementpuffer von allen Seiten genutzt, die die entsprechende Vorlage nutzen. Sie können ein "per url
" hinzufügen, so daß jede URL einen eigenen Puffer für das betreffende Element erhält.
<ol id="breadcrumbs" phptal:cache="1d per url">…</ol>
<ol>
wird für jede Seite separat einen Tag lang gepuffert.
Um für jeden einzelnen Wert eines Ausdrucks (der im Ergebnis eine Zeichenkette liefern muß) einen eigenen Puffer zu erhalten, können Sie "per expression
" verwenden.
Dabei dürfen sich die Ausdrücke nicht auf Variablen beziehen, die via tal:define
in der selben Auszeichnung definiert werden.
<ul id="user-info" phptal:cache="25m per object/id">…</ul>
<ul>
wird für jede Object-ID einzeln 25 Minuten lang gepuffert.
Seien Sie vorsichtig damit private Daten Ihrer Nutzer zu puffern. Der Zwischenspeicher wird von allen Nutzern geteilt, wenn Sie ihn nicht durch per user/id
oder ähnliche Ausdrücke benutzerspezifisch machen.
Es ist eine gute Idee, einen Puffer nicht händisch zu löschen, sondern in den per
-Parameter eine Versionsnummer oder einen Zeitstempel einzufügen. Dadurch wird die gepufferte Vorlage erneuert, sobald sich die Version oder der Zeitstempel ändert. Ein separates Pufferlöschen ist dann nicht nötig.
<div phptal:cache="100d per php:news.id . news.last_modified_date">…</div>
phptal:cache
-Blöcke können geschachtelt werden, aber der äußere Block puffert die inneren unabhängig von ihrem Alter.
metal:fill-slot
können Sie in Auszeichnungen mit phptal:cache
nicht verwenden.