2011-05-13 62 views
2

我有一个控制器与一些视图/行动。我正在使用zend_navigation和面包屑作为主导航。但是,当某些视图/操作呈现时,我想在本组视图/操作中添加一个带有本地导航的“控制面板”。添加面板是没有问题是决定哪些视图/动作我在逻辑。更改相同控制器下不同视图中的布局 - zend框架

我的ID从控制器级视图/行动

$controller = $this->getRequest()->getControllerName(); 
    $action = $this->getRequest()->getActionName(); 

但我可以传递到布局,还是我需要或可以检测到我在布局中的位置? 我想有一个选择是在一个单独的控制器中使用控制面板创建视图,但这似乎是一个愚蠢的做法。

回答

1

我认为你必须要组合的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

+0

对于部分甚至更清洁的人来说是+1 – Ascherer 2011-05-15 16:55:52

0

只是一个想法,我会做一个ControllerPlugin

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

可以工作,或只是路过就需要它的行动$this->view->cp = true;内,而且在layout.phtml文件进行检查,看如果将其设置和真正的