smarty и передача параметра массива в вызов метода

foma19

Новичок
smarty и передача параметра массива в вызов метода

Пишу проект на zend framework. Прикрутил smarty. Пытаюсь вывести простейшую ссылку. Без смарти делал так:

PHP:
<a href="<?php echo $this->url(array('controller' => 'blog'), 'default',true) ?>">Блог</a>
Как это можно переписать с использованием смарти? Особенно интересует момент где передается параметр массив
 

Вурдалак

Продвинутый новичок
У меня такой тег есть:
Код:
{uri [route="default"] [[controller="index"] [action="index"] etc] [[qs_param1="123"] etc]}
Специальный необязатный атрибут route задаёт маршрут, атрибуты с префиксом «qs_» задают параметры query string, а остальные — значения для роутера. Не идеально, но удобно.

-~{}~ 17.10.10 05:45:

P.S. Атрибуты с «qs_» ввёл, т.к. к URI может session_id добавляться. Если у тебя этой проблемы нет, то и не нужно, наверное.
 

foma19

Новичок
я так понял для всех хелперов вида надо написать плагин на смарти. спасибо!

-~{}~ 17.10.10 22:01:

Хотя если посмотреть сколько их, то может лучше так писать?
PHP:
{view_helper name="имя помощника" [[param1=""] [param2=""] etc]}
Хотя наверно так не выйдет. Была бы возможность как-то группировать параметры тогда можно было бы что-нибудь придумать

-~{}~ 19.10.10 13:52:

А как ты работаешь с объектами зендовскими? я пытаюсь переписать error.phtml в error.tpl
Там встречается такой код:
PHP:
echo $this->exception->getMessage()
При создании вьюхи у меня регистрируется объект _view и следовательно вместо $this я пишу _view

Пробовал написать так:
PHP:
{_view->exception->getMessage}
Но смарти ругается
Как вообще нормально работать с объектами в нем? В документации нет нормальных примеров
 

AmdY

Пью пиво
Команда форума
вообще-то. smarty умеет работать с объектами, можно завести какой-нить $helper
из которого таскать {$helper->url(array('controller' => 'blog'), 'default',true)}
скоро сам буду решать данную проблему, но лучше выбросить смарти и использовать Zend_View
кстати, в Symfony проде есть плагины, которые позволяют использовать шаблонизатор вместо стандартного View
 

foma19

Новичок
умеет, но в документации сказано что есть два способа зарегистрировать объект. register_object(name, object) или обычный assign. register_object написано предпочтительнее. но если через register_object делать то в шаблоне нужно обращаться к объектам без знака доллара. если написать _view->exception то все норм, а если в exception объект и напишу _view->exception->getMessage, то уже не работает. хотя если через assign писать так {$_view->exception->getMessage} то все норм
 

AmdY

Пью пиво
Команда форума
foma19
там регулярки нужно править, чтобы нормально поддерживали цепочки вызовов, для переменны, видимо уже включили изменения в ядро
 

foma19

Новичок
AmdY
PHP:
{$helper->url(array('controller' => 'blog'), 'default',true)}
я бы так и делал если бы это не вызывало ошибку синтаксиса
 

A1x

Новичок
foma19
ну не понимает смарти такого синтаксиса, я когдато так извращался:
PHP:
function someMethod($attrs) {
        if ($attrs && ! is_array($attrs)) {
            $attrs = eval(sprintf("return array%s;", $attrs));
        }
    .....
тогда в смарти можно было так передать массив методу в виде строки:
{$object->someMethod("('key' => 'value')")}
 

fixxxer

К.О.
Партнер клуба
ааааааыыыыыыыыыыы

извините

и да. я не понимаю, накой в 2010-м году нужен смарти - вменяемых шаблонных движков навалом, на любой вкус
 

Вурдалак

Продвинутый новичок
Автор оригинала: foma19
Пробовал написать так:
Код:
{_view->exception->getMessage}
PHP:
{$_view->exception->getMessage()}
-~{}~ 19.10.10 21:21:

foma19, ты какой Smarty используешь? Документация на http://www.smarty.net/ для 2-й версии, для 3-й ещё вроде бы даже и нет.

-~{}~ 19.10.10 21:27:

В 3-й версии можно писать так:
PHP:
{$helper->url(['controller' => 'blog'], 'default',true)}
Метод тыка. Сейчас Smarty предоставляет гораздо больше возможностей в синтаксисе, просто документации нет, вот и всё.
 

fixxxer

К.О.
Партнер клуба
Автор оригинала: foma19
fixxxer
например?
да полно.

нравится native php - Zend_View, sfPhpView итд итп.
нравится компилируемое - Twig
хочется минимализма и скорости - blitz, ctpp2
 

foma19

Новичок
http://www.smarty.net/manual/ru/advanced.features.php#advanced.features.objects

у меня написано $this->_smarty->register_object('_view', $this); это по зендовски, т.к. вьюху я поменял на смарти. Вот и пишу так
PHP:
{_view->exception->getMessage}
Автор оригинала: Вурдалак
В 3-й версии можно писать так:
PHP:
{$helper->url(['controller' => 'blog'], 'default',true)}
Метод тыка. Сейчас Smarty предоставляет гораздо больше возможностей в синтаксисе, просто документации нет, вот и всё.
А об этом не знал. спасибо! А есть где-нибудь полный список изменений?
 

Вурдалак

Продвинутый новичок
foma19, файл README в архиве со Smarty. Нормальной документации, как я уже сказал, ещё нет.
 
Сверху