Files
smarty/docs/id/programmers/plugins/plugins-block-functions.xml
2008-12-23 20:32:55 +00:00

128 lines
4.5 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!-- $Revision$ -->
<sect1 id="plugins.block.functions"><title>Fungsi Blok</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>smarty_block_<replaceable>name</replaceable></function></funcdef>
<paramdef>array <parameter>$params</parameter></paramdef>
<paramdef>mixed <parameter>$content</parameter></paramdef>
<paramdef>object <parameter>&amp;$smarty</parameter></paramdef>
<paramdef>boolean <parameter>&amp;$repeat</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
Fungsi blok adalah fungsi dari bentuk:
<literal>{func} .. {/func}</literal>. Dengan kata lain, ia ditutupi
blok template dan beroperasi pada isi dari blok ini. Fungsi blok
mendahului
<link linkend="language.custom.functions">fungsi kustom</link> pada
nama yang sama, yaitu anda tidak bisa mempunyai kedua fungsi kustom
<literal>{func}</literal> dan fungsi blok
<literal>{func}..{/func}</literal>.
</para>
<itemizedlist>
<listitem><para>
Standarnya implementasi fungsi anda dipanggil dua kali oleh
Smarty: sekali untuk membuka tag, dan sekali untuk meneutup tag.
(Lihat <literal>$repeat</literal> di bawah untuk bagaimana mengubah ini.)
</para></listitem>
<listitem><para>
Hanya tag terbuka terhadap fungsi blok boleh memiliki
<link linkend="language.syntax.attributes">atribut</link>. Semua
atribut dikirimkan ke fungsi template dari template diisikan dalam
variabel <parameter>$params</parameter> sebagai array asosiatif.
Atribut tag terbuka juga dapat diakses oleh fungsi anda saat memproses
tag penutup.
</para></listitem>
<listitem><para>
Nilai variabel <parameter>$content</parameter> tergantung pada apakah
fungsi anda dipanggil untuk membuka atau menutup tag. Dalam hal
membuka tag, ia akan menjadi &null;, dan dalam hal menutup tag
ia akan menjadi isi dari blok template.
Catatan bahwa blok template sudah diproses oleh Smarty, semua yang
akan anda terima adalah output template, bukan sumber template.
</para></listitem>
<listitem><para>
Parameter <parameter>$repeat</parameter> dikirimkan dengan
referensi ke implementasi fungsi dan menyediakan sebuah kemungkinan
untuk mengontrol berapa kali blok ditampilkan. Standarnya
<parameter>$repeat</parameter> adalah &true; pada panggilan pertama
fungsi-blok(tag pembuka) dan and &false; pada panggilan berikutnya
ke fungsi blok (tag penutup blok).
Setiap kali implementasi fungsi kembali dengan
<parameter>$repeat</parameter> menjadi &true;, isi antara
<literal>{func}...{/func}</literal> dievaluasi dan implementasi fungsi
dipanggil lagi dengan isi blok baru dalam parameter
<parameter>$content</parameter>.
</para></listitem>
</itemizedlist>
<para>
Jika anda mempunyai fungsi blok berulang, dimungkinkan untuk mencari fungsi
blok leluhur apa dengan mengakses variabel
<literal>$smarty->_tag_stack</literal>. Cukup lakukan
<ulink url="&url.php-manual;var_dump"><varname>var_dump()</varname></ulink>
padanya dan struktur menjadi terlihat.
</para>
<example>
<title>fungsi blok</title>
<programlisting role="php">
<![CDATA[
<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File: block.translate.php
* Type: block
* Name: translate
* Purpose: translate a block of text
* -------------------------------------------------------------
*/
function smarty_block_translate($params, $content, &$smarty, &$repeat)
{
// hanya output pada tag penutup
if(!$repeat){
if (isset($content)) {
$lang = $params['lang'];
// lakukan beberapa terjemahan puntar di sini dengan $content
return $translation;
}
}
}
?>
]]>
</programlisting>
</example>
<para>
Lihat juga:
<link linkend="api.register.block"><varname>register_block()</varname></link>,
<link linkend="api.unregister.block"><varname>unregister_block()</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
-->