Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend Navigation-如果子项处于活动状态,则将父项标记为活动_Php_Zend Framework_Twitter Bootstrap_Zend Navigation - Fatal编程技术网

Php Zend Navigation-如果子项处于活动状态,则将父项标记为活动

Php Zend Navigation-如果子项处于活动状态,则将父项标记为活动,php,zend-framework,twitter-bootstrap,zend-navigation,Php,Zend Framework,Twitter Bootstrap,Zend Navigation,我目前正在使用Zend Framework 1.12.3创建我的新网站,我看到了一些我讨厌的Zend Navigation: 当子路由处于活动状态时(例如:博客单篇文章,路由博客文章),它不会将父页面(在本例中,路由博客)标记为活动 以下是我的代码:(navigation.xml) 博客 博客 博客标题 博文 假的 博客类别 假的 很明显,如果像blog post这样的子路径处于活动状态,我会将页面blog标记为活动。不幸的是,如果不使用子页面(我不希望使用子页面),它就不能做到这一点。因此

我目前正在使用Zend Framework 1.12.3创建我的新网站,我看到了一些我讨厌的Zend Navigation:

当子路由处于活动状态时(例如:博客单篇文章,路由
博客文章
),它不会将父页面(在本例中,路由
博客
)标记为活动

以下是我的代码:(navigation.xml)


博客
博客
博客标题
博文
假的
博客类别
假的
很明显,如果像
blog post
这样的子路径处于活动状态,我会将页面
blog
标记为活动。不幸的是,如果不使用子页面(我不希望使用子页面),它就不能做到这一点。因此,如果有一种方法来标记活动的路由名称
blog
和所有以
blog
开头的路由(例如:
blog post
blog category
blog author
),那将非常有用

我不想为此使用子页面,因为我的菜单部分呈现一个空下拉列表(Twitter引导)。亲自看看:


来自文档:

array(
    'label' => 'Page 2',
    'controller' => 'page2',
    'pages' => array(
        array(
            'label' => 'Page 2.1',
            'action' => 'page2_1',
            'controller' => 'page2',
            'class' => 'special-one',
            'title' => 'This element has a special class',
            'active' => true
        ),
        array(
            'label' => 'Page 2.2',
            'action' => 'page2_2',
            'controller' => 'page2',
            'class' => 'special-two',
            'title' => 'This element has a special class too'
        )
    )
),

如您所见,父菜单项没有指定任何操作,但父菜单项和子菜单项共享同一控制器。这就是如何在子页面的父页面上显示活动状态的方法。

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

我的菜单项如下所示:

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

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

$html[] = ($active) ?  'class="active"' : '';
我根据自己的菜单模板(部分)提出了一个解决方案。基本上有一个foreach循环,它检查是否有任何子页面处于活动状态,如果有一个将父页面标记为活动状态,它看起来是这样的:

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

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

$html[] = ($active) ?  'class="active"' : '';
希望对某人有所帮助:)

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

Zend_Navigation_Page_Mvc::isActive($recursive = false)

两种方法都可以,但这一种更合适。

为什么不使用ZF2?因为这是一个新站点。我给我的主要导航元素一个模块/控制器,并将操作留空-然后每个子项都有一个操作。这就是你得到你想要的东西的方式。它不能只和uri一起工作。您必须使用路由器。@MarshallHouse我不喜欢ZF2命名空间的类。我不知道它是否支持uri中的通配符,但您可以尝试在父类中使用
/blog/*
。命名空间是一个很小的学习曲线,然后您就不想回去了。他们太整洁了。请和我一起聊天。我有一些关于ZF2的问题,如果您愿意将它们比ZF文档做得更好的话!:)事实上,我不再使用zf1,现在我使用的是ZF2,但是,这正是我使我的子页面正常工作所做的!所以,谢谢老兄批准这个!:)