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

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

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>, но выглядит грязно и не правильно!

0

Решение

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

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

1

Другие решения

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

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

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

В вашем View Helper:

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
}
0

По вопросам рекламы [email protected]