Files
smarty/docs/ru/programmers/advanced-features/advanced-features-objects.xml
2004-11-25 23:07:24 +00:00

103 lines
3.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: freespace Status: ready -->
<sect1 id="advanced.features.objects">
<title>Объекты</title>
<para>
Smarty позволяет использовать в шаблонах объекты 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");
?>
]]>
</programlisting>
<para>
Вот так нужно обращаться к вашим объектам в index.tpl:
</para>
<programlisting>
<![CDATA[
{* вызываем зарегистрированный объект *}
{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
-->