Документация Smarty


Глава 15. Расширенные возможности

Объекты

Smarty позволяет использовать в шаблонах объекты PHP. Существуют два способа их вызова. Первый - зарегистрировать объект для шаблона, затем вызвать его примерно так же, как и пользовательские функции. Второй - назначить объект шаблону и использовать его, как любую другую присвоенную переменную. Первый метод гораздо аккуратнее и безопаснее, так как у зарегистрированного объекта можно ограничить свойства и методы. Но, в тоже время, зарегистрированный объект нельзя использовать в циклах, нельзя помещать в массив объектов, и так далее. Выбор способа за вами, но используйте по возможности первый, чтобы максимально упростить синтаксис шаблона.

В безопасном режиме недоступны приватные методы и функции (имена которых начинаются с "_"). Если существует и метод, и свойство с одинаковыми именами, то будет использован метод.

Вы можете ограничить использование объекта только некоторыми методами и свойствами. Для этого перечислите их в массиве и укажите этот массив третьим параметром при регистрации объекта.

По умолчанию, параметры из шаблона передаются объекту точно так же, как и пользовательской функции. Первым параметром передаётся ассоциативный массив, вторым - объект Smarty. Если вы хотите передавать параметры по одному, как при традиционном обращении с объектами, установите четвёртый параметр вызова в false.

Необязательный пятый параметр вступает в силу только в том случае, если свойство format равно true. Он содержит список методов, которые должны обрабатываться как блоки. Это означает, что в шаблоне у методы будут иметь закрывающие тэги ({foobar->meth2}...{/foobar->meth2}) и параметры методов будут иметь такие же синопсисы, как и параметры для block-function-plugins: $params, $content, &$smarty и &$repeat. Кроме того, они ведут себя так же, как и block-function-plugins.

Пример 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()

SAPE все усложнил?

MainLink - простая и прибыльная продажа ссылок!

Последние поступления:

Размещена 10 августа 2020 года

Я по ТВ видел, что через 10 лет мы будем жить лучше, чем в Германии...
Я не понял, что это они с Германией сделать хотят?!

читать далее…

ТехЗадание на Землю

Размещена 14 марта 2018 года

Пpоект Genesis (из коpпоpативной пеpеписки)

читать далее…

Шпаргалка по работе с Vim

Размещена 05 декабря 2017 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

читать далее…

Ошибка: Error: Cannot find a valid baseurl for repo

Размещена 13 сентабря 2017 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

читать далее…

Linux Optimization

Размещена 30 июля 2012 года

Prelink

читать далее…