Я пытаюсь очистить пользовательский заполнитель из сценария просмотра, скажем, у меня есть плагин контроллера, который создает боковую панель:
$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) {
}
}
Есть идеи, как это сделать?
Спасибо.
Редактировать:
Моя проблема на самом деле была очень простой, так как мой плагин был зарегистрирован и запущен в методе postDispatch (), мой сценарий просмотра был выполнен до плагина, а макет был выполнен после плагин.
Какие у меня варианты с этого момента? На самом деле я не могу объявить свою боковую панель в методе preDispatch, потому что не будет установлен какой-либо каталог сценария, и поэтому я не смогу определить, какой сценарий представления выполнить на этом этапе.
Я мог бы также использовать помощника action()
, как вы думаете? Вопрос уже уже задан. Я до сих пор считаю, что это неправильный способ сделать это, и для меня это звучит излишне.
Кроме того, еще одна идея - переместить мой плагин в метод preDispatch () моего контроллера, но это заставит меня скопировать / вставить на каждом контроллере мою боковую панель или создать baseController, но мне все еще не нравится эта идея. , Я чувствую, что делаю это неправильно.
Любая идея?
$view->isSidebarRenderable
, и проверить его в макете перед рендерингом боковой панели. Неэлегантно, но должно работать. - person David Weinraub   schedule 24.03.2012