Objekte
Smarty erlaubt es, auf PHP-Objekte durch das Template
zuzugreifen. Dafür gibt es zwei Wege. Der erste ist, Objekte zu
registrieren und wie auf
eine eigene
Funktion zuzugreifen. Der andere Weg ist, das Objekt dem
Template mit assign() zuzuweisen
und darauf wie auf andere Variablen zuzugreifen. Die erste Methode
hat eine nettere Template Syntax und ist sicherer da der Zugriff auf
ein registriertes Objekt mit Sicherheitseinstellungen kontrolliert
werden kann. Der Nachteil ist, dass über registrierte Objekte nicht
in einer Schlaufe gelaufen werden kann und, dass es nicht möglich
ist, Arrays registrierten Objekten anzulegen. Welchen Weg Sie
einschlagen wird von Ihren Bedürfnissen definiert, die erste Methode
ist jedoch zu bevorzugen.
Wenn die Sicherheitsfunktionen
eingeschaltet sind, können keine private Methoden (solche die einen
'_'-Prefix tragen) aufgerufen werden. Wenn eine Methode und eine
Eigeschaft mit dem gleichen Namen existieren wird die Methode
verwendet.
Sie können den Zugriff auf Methoden und Eigenschaften
einschränken indem Sie sie als Array als dritten
Registrationsparameter übergeben.
Normalerweise werden Parameter welche einem Objekt via Template
übergeben werden genau so übergeben wie dies bei normalen eigenen Funktionen der
Fall ist. Das erste Objekt ist ein assoziatives Array und das
zweite das Smarty Objekt selbst. Wenn Sie die Parameter einzeln
erhalten möchten können Sie den vierten Parameter auf
false setzen.
Der optionale fünfte Parameter hat nur einen Effekt wenn
format = true ist und eine
Liste von Methoden enthält die als Block verarbeitet werden sollen.
Das bedeutet, dass solche Methoden ein schliessendes Tag im Template
enthalten müssen
({foobar->meth2}...{/foobar->meth2}) und die
Parameter zu den Funktionen die selbe Syntax haben wie
block-function-plugins: sie erhalten also die 4 Parameter
$params,
$content,
&$smarty und
&$repeat,
und verhalten sich auch sonst wie block-function-plugins.
registierte oder zugewiesene Objekte verwenden
register_object("foobar",$myobj);
// Zugriff auf Methoden und Eigeschaften einschränken
$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1'));
// wenn wir das traditionelle Parameterformat verwenden wollen, übergeben wir false für den Parameter format
$smarty->register_object("foobar",$myobj,null,false);
// Objekte zuweisen (auch via Referenz möglich)
$smarty->assign_by_ref("myobj", $myobj);
$smarty->display('index.tpl');
?>
]]>
Und hier das dazugehörige index.tpl:
meth1 p1="foo" p2=$bar}
{* Ausgabe zuweisen *}
{foobar->meth1 p1="foo" p2=$bar assign="output"}
ausgabe war: {$output}
{* auf unser zugewiesenes Objekt zugreifen *}
{$myobj->meth1("foo",$bar)}
]]>
Siehe auch register_object() und assign()