在Zend Navigation Menu中将id css添加到第一个ul

时间:2013-02-01 17:14:08

标签: php css zend-framework

我正在使用.ini文件来渲染我的菜单。

自举

    $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/menu.ini', 'nav');
    $nav = new Zend_Navigation($config);
    $view->navigation($nav);

layout.phtml

<?php echo $this->navigation()->menu()->setMaxDepth(3) ?>

我的目标:

<ul class="navigation" id="navigation">
    <li>

        <a id="menu-1" href="/">Home</a>
    </li>
</ul>

如何为第一个<ul>出现而不是class =“navigation”设置id =“navigation”?

现在我只有<ul class="navigation">,我希望<ul id="navigation"><ul class="navigation" id="navigation">

4 个答案:

答案 0 :(得分:1)

您需要在代码库中设置自定义视图助手,而不是在Zend _。

也许像GZ_View_Helper_Navigation_Menu2

然后根据你想如何配置这个新的视图辅助路径的添加,在你的bootstraps initView中这样的东西:

$view->addHelperPath('GZ/View/Helper/', 'GZ_View_Helper'); 

或者,如果使用应用程序和资源,您也可以通过ini设置它:

resources.view.helperPath.GZ_View_Helper = "GZ/View/Helper"

您的lib GZ当然需要使用PHP的include path

渲染时,您可以将调用更改为:

<?= $this->navigation()->menu2()->setMaxDepth(3) ?>

虽然我认为您也可以将默认视图帮助程序(目前无法在文档中找到)分配给导航并只需调用

<?=  $this->navigation ?>

相关:How do I extend the Zend Navigation Menu View Helper?

答案 1 :(得分:0)

您可以使用jQuery执行此操作:

$('document').load(function(){
    $("body > ul:first-child").attr('id', 'navigation');
})

修改

阅读完您的评论后,我注意到您正在使用Mootols库,因此您可以执行jQuery等效,如下所示:

window.addEvent('domready', function() {                       
    var myMenu = new MenuMatic({ orientation:'vertical' });  
    myMenu.getElement('ul').set('id', 'navigation');              
});

答案 2 :(得分:0)

我自己一直在想这个方法。我经常在Zend Framework项目中创建多个导航对象。

相反,我会提交一个不同的答案。在您的视图中,将您的调用封闭在HTML5 nav 元素内的导航输出中。这使它在语义上更加清晰,并允许您轻松地将自己的ID添加到每个部分。所以,试试这个:

<nav id="navigation"><?php echo $this->navigation()->menu()->setMaxDepth(3) ?></nav>

有趣的是 - 如果页面上只有1个导航元素,那么您甚至不需要ID。您可以使用css中的nav元素来定位它...例如,要使导航中的所有ul都具有零边距,您可以在css中执行此操作:

nav ul { margin: 0px }

答案 3 :(得分:0)

在ZF 1.12中(不知道究竟是哪个版本)有一种方法:

$这 - &GT;导航() - &GT;菜单() - &GT; setUlId( '导航') - &GT; setMaxDepth(0);