Я бы хотел использовать Smarty в сочетании с Zend Framework, особенно некоторые из его помощников View.Теперь я дошел до того, что реализовал Zend_View, который использует Smarty для отображения шаблонов.Я могу назначить значения как обычно.Пока все хорошо.
Теперь я бы очень хотел использовать помощники Zend View в Smarty.Я назначил объект Zend_View как «this» и попробовал это в шаблоне:
{$this->layout()->setLayout('default')}
Так как при этом будет напечатано возвращаемое значение метода setLayout () (который является Zend_Layout), возникает ошибка:
Исправляемая фатальная ошибка: объект класса Zend_Layout не может быть преобразован в строку в /path/to/templates_c/089c3d67082722c7cabc028fa92a077f8d8b4af5.file.default.tpl.cache.php 1010 на строке 27 * 100* Это ясно для меня, поэтому я пошел в ядро Smarty, чтобы исправить это:
Сгенерированный код действительно выглядел так:
<?php
echo $_smarty_tpl->tpl_vars['this']
->value->layout()
->setLayout('default');
?>
И теперь он читает:
<?php
$hack = $_smarty_tpl->tpl_vars['this']
->value
->layout()
->setLayout('default');
if( is_string($hack) ||
( is_object($hack) && method_exists($hack, '__toString') ) )
echo $hack;
?>
Теперь это, пожалуй, худшее исправление, о котором я могу думать, по нескольким причинам (потеря совместимости Smarty, производительность).К сожалению, это единственный.Есть ли способ остановить Smarty от попытки распечатать вывод выражения?Кроме того, я хочу, чтобы синтаксис оставался максимально интуитивным, и я не хочу писать функции Smarty для всех помощников, потому что я хочу использовать этот код со сторонним приложением (Pimcore), которое может добавлять новых помощников.
Заранее спасибо за любые предложения!