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

99 lines
3.2 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.1 -->
<sect1 id="advanced.features.objects">
<title>Объекты</title>
<para>
Смарти позволяет использовать в шаблонах объекты PHP.
Существуют два способа их вызова. Первый - зарегистрировать объект для
шаблона, затем вызвать его примерно так же, как и пользовательскую
функцию. Второй - объявить объект для шаблона и использовать его,
как любую другую объявленную переменную. Первый метод гораздо аккуратнее
и безопаснее, так как у зарегистрированного объекта можно ограничить
свойства и методы. Но, в тоже время, зарегистрированный объект
нельзя использовать в циклах, нельзя помещать в массив объектов
и так далее. Выбор способа за вами, но используйте по
возможности первый, чтобы максимально упростить синтаксис шаблона.
</para>
<para>
В безопасном режиме недоступны приватные методы и
функции (имена которых начинаются с "_").
Если существует и метод, и свойство с одинаковыми именами,
то будет использован метод.
</para>
<para>
Вы можете ограничить использование объекта только некоторыми
методами и свойствами. Для этого перечислите их в массиве и укажите
этот массив третьим параметром при регистрации объекта.
</para>
<para>
По умолчанию, параметры из шаблона передаются объекту точно так же,
как и пользовательской функции. Первым параметром передаётся
ассоциативный массив, вторым - объект Smarty. Если вы хотите передавать
параметры по одному, как при традиционном обращении с объектами, установите
четвёртый параметр вызова в false.
</para>
<example>
<title>использование зарегистрированного или объявленного объекта</title>
<programlisting role="php">
<![CDATA[
<?php
// сам объект
class My_Object() {
function meth1($params, &$smarty_obj) {
return "это мой метод meth1";
}
}
$myobj = new My_Object;
// регистрируем объект (будет доступен по ссылке)
$smarty->register_object("foobar",$myobj);
// если мы хотим ограничиться определёнными методами или свойствами, перечисляем их при регистрации
$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1'));
// если мы хотим использовать традиционный способ передачи параметров объекту, регистрируем объект с соответствующим
// флагом, установленным в false
$smarty->register_object("foobar",$myobj,null,false);
// Так же мы можем объявить объект. Желательно создавать объект по ссылке.
$smarty->assign_by_ref("myobj", $myobj);
$smarty->display("index.tpl");
?>
ШАБЛОН:
{* вызываем зарегистрированный объект *}
{foobar->meth1 p1="foo" p2=$bar}
{* результат можно перегрузить в переменную *}
{foobar->meth1 p1="foo" p2=$bar assign="output"}
в результате получаем {$output}
{* вызываем объявленный объект *}
{$myobj->meth1("foo",$bar)}
]]>
</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
-->