Table of Contents
Smarty позволяет использовать в шаблонах объекты PHP. Существуют два способа их вызова. Первый - зарегистрировать объект для шаблона, затем вызвать его примерно так же, как и пользовательские функции. Второй - назначить объект шаблону и использовать его, как любую другую присвоенную переменную. Первый метод гораздо аккуратнее и безопаснее, так как у зарегистрированного объекта можно ограничить свойства и методы. Но, в тоже время, зарегистрированный объект нельзя использовать в циклах, нельзя помещать в массив объектов, и так далее. Выбор способа за вами, но используйте по возможности первый, чтобы максимально упростить синтаксис шаблона.
В безопасном режиме недоступны приватные методы и функции (имена которых начинаются с "_"). Если существует и метод, и свойство с одинаковыми именами, то будет использован метод.
Вы можете ограничить использование объекта только некоторыми методами и свойствами. Для этого перечислите их в массиве и укажите этот массив третьим параметром при регистрации объекта.
По умолчанию, параметры из шаблона передаются объекту точно так же, как и пользовательской функции. Первым параметром передаётся ассоциативный массив, вторым - объект Smarty. Если вы хотите передавать параметры по одному, как при традиционном обращении с объектами, установите четвёртый параметр вызова в false.
Необязательный пятый параметр вступает в силу только в том случае, если
свойство format
равно true
.
Он содержит список методов, которые должны обрабатываться как блоки.
Это означает, что в шаблоне у методы будут иметь закрывающие тэги
({foobar->meth2}...{/foobar->meth2}
) и параметры
методов будут иметь такие же синопсисы, как и параметры для
block-function-plugins:
$params
,
$content
,
&$smarty
и
&$repeat
. Кроме того, они ведут себя так же, как и
block-function-plugins.
Example 15.1. использование зарегистрированного или присвоенного объекта
<?php // сам объект class My_Object { function meth1($params, &$smarty_obj) { return 'this is my 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'); ?>
А вот так можно получить доступ к объекту в index.tpl:
{* обращаемся к нашему зарегистрированному объекту *} {foobar->meth1 p1='foo' p2=$bar} {* вывод объекта можно сохранить в переменную *} {foobar->meth1 p1='foo' p2=$bar assign='output'} the output was {$output} {* обращаемся к нашему назначенному объекту *} {$myobj->meth1('foo',$bar)}
См. также register_object() и assign()