What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
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()