如何扩展了Zend导航菜单视图助手?如何扩展了Zend导航菜单视图助手?(How do I exte

2019-05-12 09:57发布

我需要改变的输出Zend_View_Helper_Navigation_Menu 。 我发现,我需要修改的两个功能,我知道该怎么做,我需要改变。 我不知道是如何使导航对象使用我的视图助手代替了Zend之一。

代码片断代表我的课堂延伸:

// file /library/My/View/Helper/Navigation/Menu.php
class My_View_Helper_Navigation_Menu extends Zend_View_Helper_Navigation_Menu
{
    protected function _renderDeepestMenu(Zend_Navigation_Container $container,
                                          $ulClass,
                                          $indent,
                                          $minDepth,
                                          $maxDepth)
    {
        // modified code here
    }

    protected function _renderMenu(Zend_Navigation_Container $container,
                                   $ulClass,
                                   $indent,
                                   $minDepth,
                                   $maxDepth,
                                   $onlyActive)
    {
        // modified code here
    }
}

编辑要澄清

我想改变类的<li>元件和除去EOL和缩进。 有没有选择这样做与菜单视图脚本,这就是为什么我得把它扩大。

初始化我引导的导航对象:

$navTable = new Default_Model_Site_DbTable_Navigation();
$view = $this->getResource('view');
$view->navigation(new Zend_Navigation($navTable->getNavigation()));

渲染在我的布局菜单:

echo $this->navigation()->menu();

我把它重新命名的东西如下工作,但我不是,为什么我不能重载清晰/覆盖_Menu类和menu()函数。

  1. 更改类名My_View_Helper_Navigation_MyMenu
  2. 添加myMenu功能的类( return parent::menu($container);
  3. 呼叫echo $this->navigation()->myMenu(); 在布局

类线框:

// file /library/My/View/Helper/Navigation/MyMenu.php
class My_View_Helper_Navigation_MyMenu extends Zend_View_Helper_Navigation_Menu
{
    public function myMenu(Zend_Navigation_Container $container = null)
    {
        return parent::menu($container);
    }

    protected function _renderDeepestMenu(Zend_Navigation_Container $container,
                                          $ulClass,
                                          $indent,
                                          $minDepth,
                                          $maxDepth)
    {
        // modified code here
    }

    protected function _renderMenu(Zend_Navigation_Container $container,
                                   $ulClass,
                                   $indent,
                                   $minDepth,
                                   $maxDepth,
                                   $onlyActive)
    {
        // modified code here
    }
}

Answer 1:

   $view->addHelperPath(
      APPLICATION_ROOT . '/library/MyApp/View/Helper/Navigation',
      'MyApp_View_Helper_'
      );


echo $this->navigation()->myMenu(); // name of your class

来源: 获得Zend_Navigation菜单与jQuery的鱼眼镜头到工作

编辑

对不起,我还没有看到你的解决方案,它到底是什么我已经张贴。

但是,为什么这不是一个真实地扩展菜单类的?



Answer 2:

对于任何人谁可能需要一个答案,我找到了一个更好的办法,可能预期的方式。

你所要做的唯一事情是创建一个扩展“Zend_View_Helper_Navigation_HelperAbstract”,并设置默认代理导航视图助手来自己自定义的视图助手。

class Admin_View_Helper_NavigationMenu extends
                                     Zend_View_Helper_Navigation_HelperAbstract {

    public function render(\Zend_Navigation_Container $container = null) {
        return "Hello world!!";
    }

}

$this->view->navigation()->setDefaultProxy("navigationMenu");

(我改变菜单控制器动作默认的代理,因为它被添加到动作堆栈)

已经做了,将有可能在视图中使用

<?= $this->navigation()->render(); ?>

注意:您仍可以重命名视图助手类,但这是视图助手在Zend中是如何工作的(名字不应该发生冲突)。



Answer 3:

你编辑您的帖子? 好像我的回答是现在完全无关你的问题?


如果你说你需要改变什么会比较容易。 目前,你的问题是有点混乱。

我以为你要编辑的视图后,您已经创建了您的导航。 如果你能在创建之前 ,那么它更容易做到这一点。 下面这一位是有点混乱,因为你通常会手前更改的选项。

// Get the helper navigation
$navigation = $viewRenderer->
                       view->
                       getHelper( 'navigation' )
                      ->menu()
                      ->renderMenu(
                    $YOUR_NAVIGATION_OBJECT,                                
                    array(  'minDepth' => null,
                        'maxDepth' => null,
                        'onlyActiveBranch' => false,
                        'renderParents'    => false,
                        // More options here


                    )                           

);

原谅压痕,这是真的很难得到它几乎内衬

请注意,我用$ YOUR_NAVIGATION_OBJECT以上。 如果你使用一个以上的导航页面上您只能使用。 否则,你强制使用渲染()而不是RenderMenu()。



文章来源: How do I extend the Zend Navigation Menu View Helper?