如何装饰zend导航菜单?

时间:2012-02-24 00:41:08

标签: php zend-framework zend-navigation

我有这个菜单:

 $menu['talent'] = array(
                 array('id'     => 'welcome', 
                       'label'  => 'My Profile', 
                       'uri'    => '/profile/,
                       'class'  => 'navlink'
                       )
                 ),
                 array('id' => 'welcome', 
                       'label' => 'My Profile', 
                       'class'  => 'navlink',
                       'uri' => '/profile/
                 ),             
    );

这将最终看起来像这样:

<ul>
    <li><a href="" class="navlink">My Profile</a></li>
    <li><a href="" class="navlink">My Profile</a></li>
<ul>

如何将ul更改为div,将li更改为其他内容?

任何idas?

由于

1 个答案:

答案 0 :(得分:1)

嗯,要实现这一点,我会使用以下两种方法之一:

使用View Helper和重载菜单()

为了重载Zend_View_Helper_Navigation_Menu,您可以编写自己的帮助程序,注册它并使其扩展Zend_View_Helper_Navigation_Menu。在您的帮助程序中,您可以重载所需的方法,例如_renderMenu()使其呈现<p>而不是<li> 。在View Helper中,您必须返回parent :: menu()或类似的内容。

最后,您必须使用以下方式注册这个新的View Helper:

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

使用部分脚本

这个在我看来要长一点,但值得一试。 基本上,您需要使用setPartial()方法将部分脚本设置为导航,并且您将通过此部分呈现菜单。

<?= $this->navigation()->menu()->setMaxDepth(2)->setPartial('partials/_nav.phtml')->render() . PHP_EOL; ?>

然后,在您的_nav.phtml中,您可以根据需要渲染菜单。从这部分中,您可以使用$this->container访问菜单变量。然后,您可以遍历容器的每个页面,并显示您想要的内容。

我知道所有这些对于这么简单的任务来说似乎都很复杂,但不幸的是,这是唯一的解决方案。有没有人有更好的主意?