Я пытаюсь очистить пользовательский заполнитель из viewscript, скажем, у меня есть плагин контроллера, который создает боковую панель:Zend Framework - очистить пользовательский заполнитель из 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());
, но мне кажется, что я не могу получить доступ к заполнитель из viewscript:
// 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(), то мой viewscript был выполнен перед тем плагин и макет был выполнен после в плагин.
Отныне, какие у меня варианты? Я не могу объявить боковую панель в методе preDispatch, потому что не будет никакого набора каталогов скриптов, и поэтому я не смогу определить, какой сценарий просмотра должен выполняться на этом этапе.
Я мог бы также использовать вспомогательный помощник , как вы думаете? Вопрос: already asked about it. Я все еще чувствую, что это не правильный способ сделать это, и это звучит слишком много.
Кроме того, еще одна идея заключается в том, чтобы переместить мой плагин в метод preDispatch() моего контроллера, но это привело бы меня к тому, чтобы скопировать/вставить на каждый контроллер мою боковую панель или создать baseController, но я до сих пор не знаю, Мне нравится эта идея, я чувствую, что делаю это неправильно.
Любая идея?
Одна идея состоит в том, чтобы установить флаг, как '$ view-> isSidebarRenderable' и проверить его в макете перед визуализацией врезку. Неэлегантный, но должен работать. –
Я думал об этом, но, как вы сказали, это кажется неэлегантным. Спасибо, что поделились своими мыслями :) –
Действительно. Мне интересно, если кто-то еще придумает что-то более чистое. Ура! –