Files
smarty/docs/de/programmers/advanced-features/advanced-features-objects.xml

131 lines
4.4 KiB
XML
Raw Normal View History

2004-04-13 11:47:32 +00:00
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
2005-12-13 23:08:22 +00:00
<!-- EN-Revision: 1.7 Maintainer: andreas Status: ready -->
2005-12-11 13:13:38 +00:00
<sect1 id="advanced.features.objects">
<title>Objekte</title>
<para>
Smarty erlaubt es, auf <ulink
url="&url.php-manual;object">PHP-Objekte</ulink> durch das Template
zuzugreifen. Daf<61>r gibt es zwei Wege. Der erste ist, Objekte zu
<link linkend="api.register.object">registrieren</link> und wie auf
eine <link linkend="language.custom.functions">eigene
Funktion</link> zuzugreifen. Der andere Weg ist, das Objekt dem
Template mit <link linkend="api.assign">assign()</link> 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 <20>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<65>rfnissen definiert, die erste Methode
ist jedoch zu bevorzugen.
</para>
<para>
Wenn die <link
linkend="variable.security">Sicherheitsfunktionen</link>
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.
</para>
<para>
Sie k<>nnen den Zugriff auf Methoden und Eigenschaften
einschr<68>nken indem Sie sie als Array als dritten
Registrationsparameter <20>bergeben.
</para>
<para>
Normalerweise werden Parameter welche einem Objekt via Template
<20>bergeben werden genau so <20>bergeben wie dies bei normalen <link
linkend="language.custom.functions">eigenen Funktionen</link> 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
<literal>false</literal> setzen.
</para>
<para>
Der optionale f<>nfte Parameter hat nur einen Effekt wenn
<parameter>format</parameter> = <literal>true</literal> ist und eine
Liste von Methoden enth<74>lt die als Block verarbeitet werden sollen.
Das bedeutet, dass solche Methoden ein schliessendes Tag im Template
enthalten m<>ssen
(<literal>{foobar->meth2}...{/foobar->meth2}</literal>) und die
Parameter zu den Funktionen die selbe Syntax haben wie
block-function-plugins: sie erhalten also die 4 Parameter
<parameter>$params</parameter>,
<parameter>$content</parameter>,
<parameter>&amp;$smarty</parameter> und
<parameter>&amp;$repeat</parameter>,
und verhalten sich auch sonst wie block-function-plugins.
</para>
<example>
<title>registierte oder zugewiesene Objekte verwenden</title>
<programlisting role="php">
<![CDATA[
<?php
// Das Objekt
2004-04-13 11:47:32 +00:00
class My_Object {
2005-12-11 13:13:38 +00:00
function meth1($params, &$smarty_obj) {
return "meine meth1";
}
2004-04-13 11:47:32 +00:00
}
$myobj = new My_Object;
2005-12-11 13:13:38 +00:00
// Objekt registrieren (referenz)
2004-04-13 11:47:32 +00:00
$smarty->register_object("foobar",$myobj);
2005-12-11 13:13:38 +00:00
// Zugriff auf Methoden und Eigeschaften einschr<68>nken
2004-04-13 11:47:32 +00:00
$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1'));
2005-12-11 13:13:38 +00:00
// wenn wir das traditionelle Parameterformat verwenden wollen, <20>bergeben wir false f<>r den Parameter format
2004-04-13 11:47:32 +00:00
$smarty->register_object("foobar",$myobj,null,false);
2005-12-11 13:13:38 +00:00
// Objekte zuweisen (auch via Referenz m<>glich)
2004-04-13 11:47:32 +00:00
$smarty->assign_by_ref("myobj", $myobj);
2005-12-11 13:13:38 +00:00
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
Und hier das dazugeh<65>rige index.tpl:
</para>
<programlisting>
<![CDATA[
{* Zugriff auf ein registriertes objekt *}
2004-04-13 11:47:32 +00:00
{foobar->meth1 p1="foo" p2=$bar}
2005-12-11 13:13:38 +00:00
{* Ausgabe zuweisen *}
2004-04-13 11:47:32 +00:00
{foobar->meth1 p1="foo" p2=$bar assign="output"}
ausgabe war: {$output}
2005-12-11 13:13:38 +00:00
{* auf unser zugewiesenes Objekt zugreifen *}
{$myobj->meth1("foo",$bar)}
]]>
</programlisting>
</example>
<para>
Siehe auch <link
linkend="api.register.object">register_object()</link> und <link
linkend="api.assign">assign()</link>
</para>
2004-04-13 11:47:32 +00:00
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->