最新消息: 新版网站上线了!!!

关于YII的菜单插件 CMenu和面包末breadcrumbs路径管理插件的一些

在使用 YIi的路径管理工具时,发现了一个问题。

                    <?php
                    $this->widget('zii.widgets.CMenu',array(
                        'items'=>array(
                            array('label'=>'首页', 'url'=>array('/site/index')),
                             array('label'=>'Products', 'url'=>array('product/index'), 'items'=>array(
                                array('label'=>'New Arrivals', 'url'=>array('product/new', 'tag'=>'new')),
                               array('label'=>'Most Popular', 'url'=>array('product/index', 'tag'=>'popular')),
                             )),
                            array('label'=>'系统设置', 'url'=>array('/setting),''),
                        ),
                    ));
                    ?>

如上所示的菜单,因为 CMENU 链接是模块(modules)路径的话,显示出来的菜单就捕获不到那个菜单当前是被激活的。可以通过简单的修改插件代码来解决这一问题:

1.打开代码文件 : yiiframework/zii/widgets/CMenu.php

2.找到代码第 226行,把isItemActive函数,替换为以下代码:

protected function isItemActive($item,$route)
{
   //原版
        //if(isset($item['url']) && is_array($item['url']) && !strcasecmp(trim($item['url'][0],'/'),$route))
        //修改版
        if(isset($item['url']) && is_array($item['url']) && strpos('/'.$route,trim($item['url'][0],'/'))>0)
   {
    if(count($item['url'])>=1)
    {
     foreach(array_splice($item['url'],1) as $name=>$value)
     {
      if(!isset($_GET[$name]) || $_GET[$name]!=$value)
       return false;
     }
    }
    return true;
   }elseif(isset($item['url']) && strlen(strstr($item['url'],$route))>0){
            return true;
        }
   return false;
}

3.原理只是修改了判断代码,使用strpos来判断路由中,是否存在当前请求的模块或控制器的路径,从而达到获取激活菜单项的目的。

转载请注明:谷谷点程序 » 关于YII的菜单插件 CMenu和面包末breadcrumbs路径管理插件的一些