加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Zend Navigation – 如果孩子处于活动状态,则将父级标记

发布时间:2020-12-13 21:47:38 所属栏目:PHP教程 来源:网络整理
导读:我目前正在使用Zend Framework 1.12.3创建我的新网站,我看到了一些我讨厌Zend Navigation的东西: When a children route is active (exemple: a blog single post,route blog-post ),it doesn’t mark the parent page (route blog in this case) as active
我目前正在使用Zend Framework 1.12.3创建我的新网站,我看到了一些我讨厌Zend Navigation的东西:

When a children route is active (exemple: a blog single post,route blog-post),it doesn’t mark the parent page (route blog in this case) as active.

这是我的代码:(navigation.xml)

<blog>
    <label>BLOG</label>
    <route>blog</route>
    <title>BLOG_TITLE</title>
    <pages>
        <blog-post>
            <route>blog-post</route>
            <visible>false</visible>
        </blog-article>
        <blog-category>
            <route>blog-category</route>
            <visible>false</visible>
        </blog-category>
    </pages>
</blog>

很明显,如果像blog-post这样的子路由处于活动状态,我会将页面博客标记为活动状态.不使用子页面(我不想要),它不会这样做.因此,如果有一种方法可以标记路由名称博客以及所有以博客开头的路由(例如:blog-post,blog-category,blog-author),那将非常有用!

我不想使用子页面,因为我的菜单部分呈现空下拉列表(Twitter Bootstrap).自己看:

解决方法

我知道它已经得到了解答,但我找到了不同的解决方案,因为马歇尔发布的一个解决方案对我不起作用.我想这是因为我没有在菜单中使用动作/控制器,而是使用路径.

我的菜单条目如下所示:

array(
    'label' => 'cms-nav_users','access_module' => 'user','resource' => 'user_admin','route' => 'admin_user','pages' => array(
        array(
            'label' => 'cms-nav_companies','route' => 'company_admin','resource' => 'company_admin',),array(
            'label' => 'cms-nav_users-list','access_module' => 'company',

我想出了一个基于我自己的菜单模板(部分)的解决方案.基本上有一个foreach循环,它检查是否有任何子页面是活动的,如果有一个 – 将父标记为活动,它看起来像这样:

$active = false;

if (!empty($page->pages))
{
    foreach ($page->pages as $subpage) 
    {
        if ($subpage->isActive()) $active = true;
    }
}

$html[] = ($active) ?  'class="active"' : '';

希望它可以帮助别人:)

UPDATE

实际上我发现你可以使用Zend Framework自己的isActive()和true参数,如源代码所示:

Zend_Navigation_Page_Mvc::isActive($recursive = false)

两种方式都可行,但这种方式更合适.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读