zend-framework – Zend Framework – 定义导航菜单的正确方法
我正在使用一个模板,其中有两个不同的导航菜单.
我正在使用布局,我已将所有模板代码放在我的default.phtml布局文件中.我面临的问题是动作导航菜单.由于此菜单的html代码位于default.phtml中,我需要根据被调用的控制器更改其内容. 我不确定这是否是正确的做法.但在我的default.phtml中,我正在检查控制器名称并相应地显示菜单.这是我正在使用的代码. <?php if(Zend_Controller_Front::getInstance()->getRequest()->getControllerName() == 'item'): ?> <!-- Action Navigation Menu --> <div class="statsRow"> <div class="wrapper"> <a href="#"><img src="/images/icons/dark/add.png" alt="" class="icon"><span>New item</span></a> <a href="#"><img src="/images/icons/dark/cd.png" alt="" class="icon"><span>Publish / Unpublish item</span></a> <a href="#"><img src="/images/icons/dark/trash.png" alt="" class="icon"><span>Delete item</span></a> </div> </div> <div class="line"></div> <?php endif; ?> 可以这样做吗?或者我有更好的方法吗? 解决方法
看起来你的Action导航菜单实际上就像一个SubMenu,其中每个Action都是子页面的一部分.做这种事情的一个好方法是有两个Zend_Navigation实例,你可以将它们存储在注册表中.然后,在您的控制器中,您可以在preDispatch()方法中调用Action Helper,如下所示:
// in each controller where you want your "action navigation menu" public function preDispatch() { $this->_helper->navigation()->renderActionNavigation(); } 当然,只有需要此Action导航菜单的控制器才会使用此方法. // in your library/My/Controller/Action/Helper class My_Controller_Action_Helper_Navigation extends Zend_Controller_Action_Helper_Abstract { private $_view = null; public function direct() { $this->_view = $view = Zend_Layout::getMvcInstance()->getView(); $this->_view->placeholder('action-navigation'); return $this; } public function renderActionNavigation() { $this->_view->render('partials/_action-navigation.phtml'); } } 如果您不使用库,只需将此代码放在/ views / helpers /中,并重命名Zend_View_Helper_Navigation类. 然后部分将负责使用占位符渲染您的subMenu: // in /view/scripts/partials/_action-navigation.phtml <?php $this->placeholder('action-navigation')->captureStart() ?> <?php $options = array('onlyActiveBranch' => true); ?> <?= $this->navigation()->menu()->renderMenu(Zend_Registry::get('nav.action-navigation'),$options); // here I assume that you've stored your Navigation container in the registry ?> <?php $this->placeholder('action-navigation')->captureEnd() ?> 此外,使用带有选项onlyActiveBranch设置为true的navigation view helper method 最后,在您的布局中,您将拥有: // in your layout file (usually named layout.phtml) <?= $this->placeholder('action-navigation'); ?> 如果您选择在注册表中注册Zend_Navigation容器,可以通过以下方式在引导程序中完成: // in your bootstrap.php protected function _initNavigation() { $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml','nav'); $container = new Zend_Navigation($config); Zend_Registry::set('nav.action-navigation',$container); } 有关容器的更多信息,请参见refer to this page.另外,如果您不熟悉占位符,请参阅here is a good practical example有关如何使用它们的信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |