Files
smarty/docs/id/programmers/advanced-features/template-resources.xml
2007-09-18 17:45:46 +00:00

262 lines
7.7 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision$ -->
<sect1 id="template.resources">
<title>Sumber daya</title>
<para>
Template mungkin berasal dari berbagai sumber. Ketika anda
<link linkend="api.display"><varname>display()</varname></link> atau
<link linkend="api.fetch"><varname>fetch()</varname></link>
sebuah template, atau saat anda menyertakan template dari dalam
template lain,
anda menyertakan sebuah tipe sumber daya, diikuti
oleh path dan nama template terkait. Jika sumber daya tidak secara
eksplisit diberi nilai, <link
linkend="variable.default.resource.type">
<parameter>$default_resource_type</parameter></link> yang diasumsikan.
</para>
<sect2 id="templates.from.template.dir">
<title>Templates dari $template_dir</title>
<para>
Template dari <link linkend="variable.template.dir">
<parameter>$template_dir</parameter></link> tidak membutuhkan sumber
daya template
, meskipun anda dapat menggunakan sumber daya
<literal>file:</literal> untuk konsistensi. Cukup sertakan path ke template yang
ingin anda gunakan relatif ke direktori akar <link linkend="variable.template.dir">
<parameter>$template_dir</parameter></link>.
</para>
<example>
<title>Menggunakan template dari $template_dir</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->display('index.tpl');
$smarty->display('admin/menu.tpl');
$smarty->display('file:admin/menu.tpl'); // sama seperti yang di atas
?>
]]>
</programlisting>
<para>Dari dalam template Smarty</para>
<programlisting>
<![CDATA[
{include file='index.tpl'}
{* di bawah ini sama seperti yang di atas*}
{include file='file:index.tpl'}
]]>
</programlisting>
</example>
</sect2>
<sect2 id="templates.from.any.dir">
<title>Template dari direktori mana saja</title>
<para>
Template di luar <link linkend="variable.template.dir">
<parameter>$template_dir</parameter></link>
memerlukan tipe sumber daya template <literal>file:</literal>, diikuti
oleh path absolut ke template.
</para>
<example>
<title>Menggunakan template daru direktori mana saja</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->display('file:/export/templates/index.tpl');
$smarty->display('file:/path/to/my/templates/menu.tpl');
?>
]]>
</programlisting>
<para>
Dan dari dalam template Smarty:
</para>
<programlisting>
<![CDATA[
{include file='file:/usr/local/share/templates/navigation.tpl'}
]]>
</programlisting>
</example>
<sect3 id="templates.windows.filepath">
<title>Path file Windows</title>
<para>
Jika anda menggunakan mesin Windows, path file biasanya menyertakan
sebuah huruf drive (C:) di awal nama path. Pastikan untuk menggunakan
<literal>file:</literal> dalam path guna menghindari konflik namespace dan
memperoleh hasil yang diinginkan.
</para>
<example>
<title>Menggunakan template dari path file windows</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->display('file:C:/export/templates/index.tpl');
$smarty->display('file:F:/path/to/my/templates/menu.tpl');
?>
]]>
</programlisting>
<para>
Dan dari dalam template Smarty:
</para>
<programlisting>
<![CDATA[
{include file='file:D:/usr/local/share/templates/navigation.tpl'}
]]>
</programlisting>
</example>
</sect3>
</sect2>
<sect2 id="templates.from.elsewhere">
<title>Template dari sumber daya lain</title>
<para>
Anda dapat mengambil template menggunakan sumber daya apapun
yang mungkin anda akses dengan PHP: database, soket, LDAP, dan
seterusnya. Anda melakukan ini dengan menulis fungsi plugins
sumber daya dan mendaftarkannya dengan Smarty.
</para>
<para>
Lihat seksi <link linkend="plugins.resources">plugins sumber daya</link>
untuk informasi lebih jauh mengenai fungsi yang harus anda sediakan.
</para>
<note>
<para>
Catatan bahwa anda tidak bisa menimpa sumber daya built-in
<literal>file:</literal>, tapi anda dapat menyediakan sumber daya yang
mengambil template dari sistem file dalam beberapa cara lain dengan
mendaftarkan di bawah nama sumber daya lain.
</para>
</note>
<example>
<title>Menggunakan sumber daya kustom</title>
<programlisting role="php">
<![CDATA[
<?php
// simpan fungsi ini di mana saja dalam aplikasi anda
function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{
// lakukan pemanggilan database di sini untuk mengambil template anda,
// populasikan $tpl_source
$sql = new SQL;
$sql->query("select tpl_source
from my_table
where tpl_name='$tpl_name'");
if ($sql->num_rows) {
$tpl_source = $sql->record['tpl_source'];
return true;
} else {
return false;
}
}
function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
// tidak ada pemanggilan database di sini untuk mempopulasikan $tpl_timestamp.
$sql = new SQL;
$sql->query("select tpl_timestamp
from my_table
where tpl_name='$tpl_name'");
if ($sql->num_rows) {
$tpl_timestamp = $sql->record['tpl_timestamp'];
return true;
} else {
return false;
}
}
function db_get_secure($tpl_name, &$smarty_obj)
{
// menganggap seluruh template aman
return true;
}
function db_get_trusted($tpl_name, &$smarty_obj)
{
// tidak digunakan untu templates
}
// mendaftarkan nama sumber daya "db"
$smarty->register_resource("db", array("db_get_template",
"db_get_timestamp",
"db_get_secure",
"db_get_trusted"));
// menggunakan sumber daya dari naskah php
$smarty->display("db:index.tpl");
?>
]]>
</programlisting>
<para>
Dan dari dalam template Smarty:
</para>
<programlisting>
<![CDATA[
{include file='db:/extras/navigation.tpl'}
]]>
</programlisting>
</example>
</sect2>
<sect2 id="default.template.handler.function">
<title>Fungsi pengendali template default</title>
<para>
Anda bisa menetapkan fungsi yang dipakai untuk mengambil
konten template
seandainya template tidak dapat diambil dari
sumber dayanya. Satu kegunaan dari ini adalah untuk membuat
template yang tidak ada secara-langsung.
</para>
<example>
<title>Menggunakan fungsi pengendali template default</title>
<programlisting role="php">
<![CDATA[
<?php
// simpan ini di mana saja dalam aplikasi anda
function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp,
&$smarty_obj)
{
if( $resource_type == 'file' ) {
if ( ! is_readable ( $resource_name )) {
// buat file template, hasilkan konten.
$template_source = "This is a new template.";
require_once SMARTY_CORE_DIR . 'core.write_file.php';
smarty_core_write_file( array( 'filename'=>$smarty_obj->template_dir . DIRECTORY_SEPARATOR . $resource_name, 'contents'=>$template_source ), $smarty_obj );
return true;
}
} else {
// bukan sebuah file
return false;
}
}
// set pengendali standar
$smarty->default_template_handler_func = 'make_template';
?>
]]>
</programlisting>
</example>
</sect2>
</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
-->