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