Я пытаюсь очистить пользовательский заполнитель от viewScript, скажем, у меня есть плагин контроллера, который создает боковую панель:
$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');
$view = $bootstrap->getResource('view');
$partial = $view->render('partials/_sidebar.phtml');
$view->placeholder('sidebar')->append($partial);
Моя часть содержит мое подменю (отображается через помощник вида Zend_Navigation).
Чтобы отобразить эту боковую панель, у меня есть это в моем макете:
<?= $this->placeholder('sidebar'); ?>
Но что, если на некоторых страницах я не хочу отображать свою боковую панель (например, страницу входа)? Как я могу справиться с этими случаями?
Я думал, что могу сбросить / очистить свой заполнитель, используя $this->placeholder('sidebar')->exchangeArray(array());
, но мне кажется, что я не могу получить доступ к своему заполнителю из сценария просмотра:
// in /application/modules/default/views/account/login.phtml
<?php $placeholder = $this->placeholder('sidebar');
Zend_Debug::dump($placeholder); ?>
// output:
object(Zend_View_Helper_Placeholder_Container)#217 (8) {
["_prefix":protected] => string(0) ""
["_postfix":protected] => string(0) ""
["_separator":protected] => string(0) ""
["_indent":protected] => string(0) ""
["_captureLock":protected] => bool(false)
["_captureType":protected] => NULL
["_captureKey":protected] => NULL
["storage":"ArrayObject":private] => array(0) {
}
}
Есть идеи, как это сделать?
Спасибо.
Edit:
Моя проблема была на самом деле очень простой, так как мой плагин был зарегистрирован и выполнен в методе postDispatch (), тогда мой скрипт был выполнен за до , плагин и макет были выполнены после плагин.
Отныне, какие у меня варианты? Я действительно не могу объявить свою боковую панель в методе preDispatch, потому что не будет никакого установленного каталога скриптов, и, следовательно, я не смогу определить, какой скрипт представления выполнить на этом шаге.
Я мог бы также использовать помощника action()
, как вы думаете? Был задан вопрос . Я все еще чувствую, что это неправильный способ сделать это, и мне это кажется излишним.
Кроме того, другой идеей было бы переместить мой плагин в метод preDispatch () моего контроллера, но это привело бы к копированию / вставке на каждом контроллере моей боковой панели или созданию baseController, но я все еще не как эта идея, я чувствую, что я делаю это неправильно.
Есть идеи?