[Smarty Basics] Ausgabe abfangen (Capture)
Posted: Fri Jun 12, 2009 11:08 pm
Hallo zusammen,
anbei eine kurze Smarty Notiz. Ein Smarty Feature, dass ich oft und gerne nutze. Im Grunde wird alles zwischen den {capture} Tags aufgezeichnet. Über eine Variable kann ich den Inhalt (die Aufnahme) dann an beliebiger Stelle ausgeben (oder an Plug-ins oder Module weiterreichen). Der Inhalt zwischen den Tags wird über die Variable ausgegeben und erscheint nicht direkt.
EDIT: Achtung, es werden auch Leerzeichen oder Tab-Stops etc im Capture aufgezeichnet. Wenn das Capture also bei leerem Inhalt auch selbst wirklich leer sein soll, die Anweisung am besten in einer Zeile schreiben.
Das ist ganz praktisch, wenn man z.B. ein DIV um ein Element setzen möchte, und ansonsten nichts erscheinen soll.
Wurde das ganze mit dem Capture vorher aufgezeichnet, können wir nun die Aufzeichnung auf Inhalt prüfen. Ist das Capture leer, brauchen wir keinen Block (bzw. garnichts).
Eine Plug-in-Ausgabe aufzuzeichnen ist nur ein Beispiel. In das Capture passt alles mögliche rein (HTML, JS, XML ...) . Nur bei Zahlen wird es eng, denn die Aufzeichnung liegt nur als String vor.
Wer lieber über das Name-Attribute an den Content ran möchte, ändert die Nutzung wie folgt:
Beste Grüße
Nils
anbei eine kurze Smarty Notiz. Ein Smarty Feature, dass ich oft und gerne nutze. Im Grunde wird alles zwischen den {capture} Tags aufgezeichnet. Über eine Variable kann ich den Inhalt (die Aufnahme) dann an beliebiger Stelle ausgeben (oder an Plug-ins oder Module weiterreichen). Der Inhalt zwischen den Tags wird über die Variable ausgegeben und erscheint nicht direkt.
Code: Select all
{capture assign=VAR_NAME}{some_plug_in}{/capture}
Oder aber auch sowas:
{capture assign=VAR_NAME}
HTML, Text, JS, ...
{/capture}
Das ist ganz praktisch, wenn man z.B. ein DIV um ein Element setzen möchte, und ansonsten nichts erscheinen soll.
Code: Select all
Problem:
<div>
{some_plug_in}
</div>
Erzeugt Folgendes, wenn keine Rückgabe bzw. leer:
<div>
</div>
Code: Select all
{capture assign=banner}{some_plug_in}{/capture}
{if $banner != ''}
<div id="banner">{$banner}</div>
{/if}
Wer lieber über das Name-Attribute an den Content ran möchte, ändert die Nutzung wie folgt:
Code: Select all
{capture name=banner}
Irgendwas...
{/capture}
{$smarty.capture.banner}
Nils