zend-framework – Zend Framework – 定义导航菜单的正确方法

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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导航菜单的控制器才会使用此方法.
此Action Helper将基本获取当前视图对象,创建占位符并呈现部分,如下所示:

// 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 renderMenu()渲染菜单将允许您仅渲染活动分支,其中每个分支将对应于您的控制器.

最后,在您的布局中,您将拥有:

// 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有关如何使用它们的信息.

脚本宝典总结

以上是脚本宝典为你收集整理的zend-framework – Zend Framework – 定义导航菜单的正确方法全部内容,希望文章能够帮你解决zend-framework – Zend Framework – 定义导航菜单的正确方法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。