Zend Framework1, есть ли способ переопределить функции Zend_View_Helper_ * для каждого контроллера?

0

У меня есть помощник вида, как показано ниже, и он работает отлично:

class Zend_View_Helper_List extends Zend_View_Helper_Abstract
{
    public function list()
    {
        return '<ul><li>Something Really Good</li></ul>'; // generated html 
    }
}

У меня это в моем глобальном расположении myapp.phtml:

<div><?php echo $this->list(); ?></div>

Мой вопрос в том, как я могу переопределить list() в другом контроллере или даже более гранулированный, каждый элемент управления?

Я попытался установить переменную View в каждом контроллере, например, $this->view->type а затем передать ее в функцию списка <div><?php echo $this->list($this->type);?></div> <div><?php echo $this->list($this->type);?></div>, но он выглядит грязным и не прав!

Теги:
zend-framework
view-helpers

2 ответа

1
Лучший ответ

Вы можете поместить своих помощников в папку view/helpers конкретного контроллера, чтобы он был видимым только для этого контроллера.

Вы также можете добавить новый путь для помощников $this->view->setHelperPath('MyScripts/View/Helper/','MyScripts_View_Helper'); если вам нужно изменить его за действие.

0

Если вы хотите иметь только один помощник вида, вы можете эффективно использовать переменные.
Вы можете попробовать что-то вроде этого:

В вашем действии foo:

$this->view->type = 'action_foo';

В вашем помощнике просмотра:

public function list()
{
    if (isset($this->view->type)){
        if ('action_foo' == $this->view->type)
            return '<ul><li>Something Really Good for Foo Action</li></ul>'; // generated html 
        else
            return '<ul><li>' . $this->view->type . '</li></ul>'; // generated html 
    }
    else
        return '<ul><li>Something Really Good</li></ul>'; // generated html 
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню