我有一个带有许多视图/操作的控制器。我正在使用zend_navigation和面包屑进行主导航。但是,当呈现某些视图/操作时,我想在这组视图/操作中添加一个带有本地导航的"控制面板"。添加面板没有问题,这是决定我处于哪个视图/操作的逻辑。
我可以从控制器级别识别视图/操作
$controller = $this->getRequest()->getControllerName();
$action = $this->getRequest()->getActionName();
但是我可以将其传递给布局,还是需要或可以检测我在布局中的位置?我想一种选择是在单独的控制器中使用控制面板创建视图,但这似乎是一种愚蠢的方法。
我认为你必须结合ArneRie和Acherer所说的话:
在/application/configs/cp.ini 中:
cp[] = "moduleA.controllerB.actionC"
cp[] = "moduleA.controllerD.actionE"
在您的引导程序内:
protected function _initCp()
{
$ini = new Zend_Config_Ini(APPLICATION_PATH . '/configs/cp.ini');
Zend_Registry::set('cp', $ini->toArray());
}
在布局内:
<?= $this->partial('cp.phtml') ?>
在你的部分:/application/layouts/cp.phtml:
<?php
$request = Zend_Controller_Front::getInstance()->getRequest();
$module = $request->getModuleName();
$controller = $request->getControllerName();
$action = $request->getActionName();
if (in_array(implode('.', array($module, $controller, $action)), Zend_Registry::get('cp')) : ?>
// display cp html here
<?php endif ?>
你可能想仔细检查 ini 数组,但这是 Zend Jedi :p 的路径
只是一个想法,我会在控制器插件中执行此操作
public function preDispatch()
{
$controller = $this->getRequest()->getControllerName();
$action = $this->getRequest()->getActionName();
$layout = Zend_Layout::getMvcInstance();
$layoutView = $layout->getView();
$whereIam = $controller. '.' .$action;
switch ($whereIam) {
case 'index.showuser':
$layoutView->showPanel = true;
$layoutView->controlPanel = $this->view->render('myPanel.phtml');
break;
default:
break;
}
}
//layout.phtml
if ($this->showPanel === true) {
echo $this->controlPanel;
}
工作,或者只是传递需要它的操作$this->view->cp = true;
,并在layout.phtml文件中检查其设置和true。