mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-11-03 22:01:36 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			255 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			255 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
<?xml version="1.0" encoding="windows-1251"?>
 | 
						||
<!-- $Revision$ -->
 | 
						||
<!-- EN-Revision: 1.4 Maintainer: freespace Status: ready -->
 | 
						||
<sect1 id="template.resources">
 | 
						||
 <title>Ресурсы</title>
 | 
						||
 <para>
 | 
						||
  Шаблоны можно получать из самых разных источников. Когда вы
 | 
						||
  <link linkend="api.display">отображаете</link> или
 | 
						||
  <link linkend="api.fetch">вызываете</link> шаблон,
 | 
						||
  либо когда вы подключаете один шаблон к другому, вы указываете тип ресурса,
 | 
						||
  вместе с соответствующим путём и названием шаблона.
 | 
						||
  Если тип ресурса явно не задан, используется значения свойства
 | 
						||
  <link linkend="variable.default.resource.type">$default_resource_type</link>.
 | 
						||
 </para>
 | 
						||
 | 
						||
 <sect2 id="templates.from.template.dir">
 | 
						||
  <title>Шаблоны из папки $template_dir</title>
 | 
						||
  <para>
 | 
						||
   Шаблоны, которые находятся в папке
 | 
						||
   <link linkend="variable.template.dir">$template_dir</link>,
 | 
						||
   не требуют при вызове указания
 | 
						||
   типа ресурса, хотя вы можете использовать префикс file: для сохранения
 | 
						||
   стиля. Для вызова просто укажите относительный от
 | 
						||
   <link linkend="variable.template.dir">$template_dir</link>
 | 
						||
   путь к шаблону.
 | 
						||
  </para>
 | 
						||
  <example>
 | 
						||
   <title>Вызов шаблона из папки $template_dir</title>
 | 
						||
   <programlisting role="php">
 | 
						||
<![CDATA[
 | 
						||
<?php
 | 
						||
$smarty->display('index.tpl');
 | 
						||
$smarty->display('admin/menu.tpl');
 | 
						||
$smarty->display('file:admin/menu.tpl'); // тоже самое, что и строкой выше
 | 
						||
?>
 | 
						||
 | 
						||
{* код в шаблоне Smarty *}
 | 
						||
{include file="index.tpl"}
 | 
						||
{include file="file:index.tpl"} {* тоже самое, что и строкой выше *}
 | 
						||
]]>
 | 
						||
   </programlisting>
 | 
						||
  </example>
 | 
						||
 </sect2>
 | 
						||
 | 
						||
 <sect2 id="templates.from.any.dir">
 | 
						||
  <title>Шаблоны из произвольной папки</title>
 | 
						||
  <para>
 | 
						||
   Для вызова шаблонов из папки вне
 | 
						||
   <link linkend="variable.template.dir">$template_dir</link>
 | 
						||
   необходимо использовать префикс file: с последующим указанием асболютного
 | 
						||
   пути и имени шаблона.
 | 
						||
  </para>
 | 
						||
  <example>
 | 
						||
   <title>Вызов шаблона из произвольной папки</title>
 | 
						||
   <programlisting role="php">
 | 
						||
<![CDATA[
 | 
						||
<?php
 | 
						||
$smarty->display('file:/export/templates/index.tpl');
 | 
						||
$smarty->display('file:/path/to/my/templates/menu.tpl');
 | 
						||
?>
 | 
						||
]]>
 | 
						||
   </programlisting>
 | 
						||
   <para>
 | 
						||
    А изнутри шаблона Smarty:
 | 
						||
   </para>
 | 
						||
   <programlisting>
 | 
						||
<![CDATA[
 | 
						||
{include file="file:/usr/local/share/templates/navigation.tpl"}
 | 
						||
]]>
 | 
						||
   </programlisting>
 | 
						||
  </example>
 | 
						||
 | 
						||
  <sect3 id="templates.windows.filepath">
 | 
						||
   <title>Файловые пути в Windows</title>
 | 
						||
   <para>
 | 
						||
    Если вы работаете под Windows, то пути к файлам, как правило,
 | 
						||
    начинаются с буквы логического диска (например, C:). Не забудьте
 | 
						||
    указать префикс "file:" в начале пути, чтобы избежать конфликтов
 | 
						||
    имён и достичь необходимого результата.
 | 
						||
   </para>
 | 
						||
   <example>
 | 
						||
    <title>использование шаблонов с файловіми путями Windows</title>
 | 
						||
    <programlisting role="php">
 | 
						||
<![CDATA[
 | 
						||
<?php
 | 
						||
// PHP скрипт
 | 
						||
$smarty->display('file:C:/export/templates/index.tpl');
 | 
						||
$smarty->display('file:F:/path/to/my/templates/menu.tpl');
 | 
						||
?>
 | 
						||
]]>
 | 
						||
    </programlisting>
 | 
						||
    <para>
 | 
						||
     А изнутри шаблона Smarty:
 | 
						||
    </para>
 | 
						||
    <programlisting>
 | 
						||
<![CDATA[
 | 
						||
{include file="file:D:/usr/local/share/templates/navigation.tpl"}
 | 
						||
]]>
 | 
						||
    </programlisting>
 | 
						||
   </example>
 | 
						||
  </sect3>
 | 
						||
 </sect2>
 | 
						||
 | 
						||
 <sect2 id="templates.from.elsewhere">
 | 
						||
  <title>Шаблоны из прочих источников</title>
 | 
						||
  <para>
 | 
						||
   Вы можете вызывать шаблоны, используя любые доступные через PHP источники:
 | 
						||
   базы данных, сокеты, LDAP и так далее.
 | 
						||
   Для этого нужно написать соответствующий плагин ресурса и зарегистрировать
 | 
						||
   его в Smarty.
 | 
						||
  </para>
 | 
						||
 | 
						||
  <para>
 | 
						||
   Смотрите раздел <link linkend="plugins.resources">плагины ресурсов</link>
 | 
						||
   для более подробной информации о тех функциях, которые вы должны
 | 
						||
   предоставить.
 | 
						||
  </para>
 | 
						||
 | 
						||
  <note>
 | 
						||
   <para>
 | 
						||
    Обратите внимание на то, что вы не можете переопределить встроенный ресурс
 | 
						||
    <literal>file</literal>, но в ваших силах написать и зарегистрировать ресурс с
 | 
						||
    другим именем, который будет использовать другой способ вызова шаблонов из
 | 
						||
    файловой системы.
 | 
						||
   </para>
 | 
						||
  </note>
 | 
						||
  <example>
 | 
						||
   <title>Использование собственных ресурсов</title>
 | 
						||
   <programlisting role="php">
 | 
						||
<![CDATA[
 | 
						||
// код в вашем скрипте
 | 
						||
function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
 | 
						||
{
 | 
						||
    // обращаемся к базе, запрашиваем код шаблона,
 | 
						||
    // перегружаем его в $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)
 | 
						||
{
 | 
						||
    // обращаемся к базе, запрашиваем поле $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)
 | 
						||
{
 | 
						||
    // предполагаем, что наши шаблоны совершенно безопасны
 | 
						||
    return true;
 | 
						||
}
 | 
						||
 | 
						||
function db_get_trusted($tpl_name, &$smarty_obj)
 | 
						||
{
 | 
						||
    // не используется для шаблонов
 | 
						||
}
 | 
						||
 | 
						||
// регистрируем ресурс под именем "db"
 | 
						||
$smarty->register_resource("db", array("db_get_template",
 | 
						||
                                       "db_get_timestamp",
 | 
						||
                                       "db_get_secure",
 | 
						||
                                       "db_get_trusted"));
 | 
						||
 | 
						||
// используем ресурс из PHP скрипта
 | 
						||
$smarty->display("db:index.tpl");
 | 
						||
?>
 | 
						||
]]>
 | 
						||
    </programlisting>
 | 
						||
    <para>
 | 
						||
     А изнутри шаблона Smarty:
 | 
						||
    </para>
 | 
						||
    <programlisting>
 | 
						||
<![CDATA[
 | 
						||
{include file="db:/extras/navigation.tpl"}
 | 
						||
]]>
 | 
						||
   </programlisting>
 | 
						||
  </example>
 | 
						||
 </sect2>
 | 
						||
 | 
						||
 <sect2 id="default.template.handler.function">
 | 
						||
  <title>Функция для обработки шаблона по умолчанию</title>
 | 
						||
  <para>
 | 
						||
   Вы можете определить функцию, которая будет использована,
 | 
						||
   если шаблон не может быть вызван из соответствующего ресурса.
 | 
						||
   Это можно использовать, к примеру, для построения недостающего
 | 
						||
   шаблона на лету.
 | 
						||
  </para>
 | 
						||
  <example>
 | 
						||
   <title>использование функции для обработки шаблона по умолчанию</title>
 | 
						||
   <programlisting role="php">
 | 
						||
<![CDATA[
 | 
						||
<?php
 | 
						||
// код в вашем скрипте
 | 
						||
 | 
						||
function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp, &$smarty_obj)
 | 
						||
{
 | 
						||
	if( $resource_type == 'file' ) {
 | 
						||
		if ( ! is_readable ( $resource_name )) {
 | 
						||
			// создаём и записываем файл шаблона.
 | 
						||
			$template_source = "Это новый шаблон.";
 | 
						||
			$template_timestamp = time();
 | 
						||
			$smarty_obj->_write_file($resource_name,$template_source);
 | 
						||
			return true;
 | 
						||
		}
 | 
						||
    } else {
 | 
						||
		// не файл
 | 
						||
		return false;
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
// определение обработчика
 | 
						||
$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
 | 
						||
-->
 |