Files
smarty/docs/ru/programmers/plugins/plugins-block-functions.xml
2004-09-08 21:49:10 +00:00

118 lines
4.3 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="windows-1251"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.3 Maintainer: tony2001 Status: ready -->
<sect1 id="plugins.block.functions">
<title>Блоковые функции</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>
Блоковые функции выглядят следующим образом: {func} .. {/func}. Другими словами,
они заключены в определенном блоке шаблона и оперируют содержимым этого блока.
Блоковые функции имеют приоритет перед пользовательскими функциями, имеющими то же имя,
поэтому, вы не сможете использовать одновременно свои функции вида {func} и
блоковые функции {func} .. {/func}.
</para>
<para>
Smarty вызывает ваши функции дважды:
первый раз при открытии тэга и второй раз при закрытии тэга.
</para>
<para>
Только открывающий тэг блоковой функции может иметь атрибуты. Все
атрибуты, переданные в функцию из шаблона сохраняются
в <parameter>$params</parameter> в виде ассоциативного массива. Вы можете
получить прямой доступ к их значениям:
<varname>$params['start']</varname> или использовать
<varname>extract($params)</varname> для импорта.
Атрибуты, переданные в открывающем тэге доступны для вашей функции
до обработки закрывающего тэга включительно.
</para>
<para>
Значение переменной <parameter>$content</parameter> зависит от того,
вызывается ли ваша функция для открывающего тэга или вызов происходит при закрытии тэга.
В случае с открывающим тэгом, это значение будет равно <literal>null</literal>, а в случае
закрывающего тэга, значение будет равно содержимому блока в шаблоне.
Заметьте, что этот блок шаблона уже будет обработан
Smarty и на выводе вы получите результат обработки, а не
исходный код шаблона.
</para>
<para>
Параметр <parameter>&amp;$repeat</parameter> передается по
ссылке в функцию и дает ей возможность контролировать
количество отображений блока.
По умолчанию <parameter>$repeat</parameter> равен <literal>true</literal>
во время первого вызова блоковой функции (открывающий тэг блока)
и <literal>false</literal> при всех последующих вызовах блоковой функции
(закрывающий тэг блока).
Каждый раз, когда ваша функция возвращает параметр <parameter>&amp;$repeat</parameter>
равный <literal>true</literal>, содержимое между
{func} .. {/func} обрабатывается и ваша функция вновь вызывается, причем новое содержимое
блока передается в параметре <parameter>$content</parameter>.
</para>
<para>
Если вы используете вложенные блоковые функции, есть возможность определять родительские
блоковые функции. Достаточно получить значение переменной
<varname>$smarty->_tag_stack</varname>. Затем останется только применить var_dump()
для нее и структура будет видна.
</para>
<para>
Смотрите также:
<link linkend="api.register.block">register_block()</link>,
<link linkend="api.unregister.block">unregister_block()</link>.
</para>
<example>
<title>Блоковая функция</title>
<programlisting role="php">
<![CDATA[
<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* Файл: block.translate.php
* Тип: block
* Имя: translate
* Назначение: перевести блок (кусок) текста
* -------------------------------------------------------------
*/
function smarty_block_translate($params, $content, &amp;$smarty)
{
if ($content) {
$lang = $params['lang'];
// здесь выполнить интеллектуальный перевод строки $content
echo $translation;
}
}
?>
]]>
</programlisting>
</example>
</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
-->