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

143 lines
4.7 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<sect1 id="advanced.features.objects">
<title>Obyek</title>
<para>
Smarty membolehkan akses ke
<ulink url="&url.php-manual;object">obyek</ulink> PHP melalui template.
Ada dua cara untuk mengaksesnya.
</para>
<itemizedlist spacing="compact">
<listitem><para>
Cara pertama adalah <link linkend="api.register.object">meregistrasi obyek</link> ke
template, lalu menaksesnya via sintaks mirip dengan
<link linkend="language.custom.functions">fungsi kustom</link>.
</para></listitem>
<listitem><para>
Cara kedua adalah fungsi <link linkend="api.assign"><varname>assign()</varname>
</link> obyek ke template dan mengaksesnya seperti halnya variabel lainnya yang
ditempati.
</para></listitem>
</itemizedlist>
<para>
Metode pertama ini merupakan sintaks template lebih baik. Ia juga lebih aman,
karena obyek terdaftar dapat dibatasi ke metode atau properti tertentu. AKan tetapi,
<emphasis role="bold">obyek terdaftar tidak bisa diulang terus menerus atau ditempati
dalam obyek arrays</emphasis>, dll. Metode yang anda pilih akan ditentukan oleh
kebutuhan anda, tapi gunakan metode pertama bila memungkinkan untuk
memelihara sintaks template menjadi minimum.
</para>
<para>
Jika <link linkend="variable.security"><parameter>$security</parameter></link>
dihidupkan, tidak ada metode privat atau fungsi yang dapat diakses
(diawali dengan '_'). Jika ada metode dan properti dari nama yang sama,
metode yang akan dipakai.
</para>
<para>
Anda dapat membatasi metode dan propertis yang bisa diakses dengan
mendaftarkannya dalam sebuah array sebagai parameter ketiga registrasi.
</para>
<para>
Secara standar, parameter dioperkan ke obyek melaluis template, dioperkan
dengan cara yang sama
<link linkend="language.custom.functions">fungsi kustom</link> mendapatkannya.
Array asosiatif dioper sebagai parameter pertama, dan obyek smarty sebagai
yang kedua. Jika anda menginginkan parameter mengoper satu parameter
sekali waktu untuk setiap argumen seperti pengoperan parameter obyek
tradisional, set parameter registrasi ke empat dengan &false;.
</para>
<para>
Parameter opsional ke lima hanya berpengaruh dengan
<parameter>format</parameter> dijadikan &true;
dan berisi daftar metode yang seharusnya diperlakukan sebagai blok. Itu
berarti metode ini mempunyai tag penutup dalam template
(<literal>{foobar->meth2}...{/foobar->meth2}</literal>) dan
parameter pada metode mempunyai sinopsis yang sama seperti parameter
untuk
<link linkend="plugins.block.functions">
<varname>block-function-plugins</varname></link>:
Ia medapatkan empat parameters
<parameter>$params</parameter>,
<parameter>$content</parameter>,
<parameter>&amp;$smarty</parameter> dan
<parameter>&amp;$repeat</parameter> dan juga bertindak seperti
block-function-plugins.
</para>
<example>
<title>Menggunakan obyek teregistrasi atau ditempatkan</title>
<programlisting role="php">
<![CDATA[
<?php
// obyek
class My_Object {
function meth1($params, &$smarty_obj) {
return 'this is my meth1';
}
}
$myobj = new My_Object;
// meregistrasi obyek (akan menjadi referensi)
$smarty->register_object('foobar',$myobj);
// Jika kita ingin membatasi akses ke metode atau properti tertentu, daftarkan
$smarty->register_object('foobar',$myobj,array('meth1','meth2','prop1'));
// Jika anda ingin menggunakan format parameter obyek tradisional, operkan nilai boolean false
$smarty->register_object('foobar',$myobj,null,false);
// Kita juga menempatkan obyek. assign_by_ref bila memungkinkan.
$smarty->assign_by_ref('myobj', $myobj);
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
Dan ini adalah bagaimana untuk mengakses obyek anda dalam <filename>index.tpl</filename>:
</para>
<programlisting>
<![CDATA[
{* akses obyek teregistrasi kita*}
{foobar->meth1 p1='foo' p2=$bar}
{* anda juga dapat menempatkan output *}
{foobar->meth1 p1='foo' p2=$bar assign='output'}
the output was {$output}
{* akses obyek kita yang sudah ditempatkan *}
{$myobj->meth1('foo',$bar)}
]]>
</programlisting>
</example>
<para>
Lihat juga <link
linkend="api.register.object"><varname>register_object()</varname></link>
dan
<link linkend="api.assign"><varname>assign()</varname></link>.
</para>
</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
-->