关于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 链接是模块路径,显示出来的菜单就捕获不到那个菜单当前是被激活的。可以通过简单的修改插件代码来解决这一问题。
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的Breadcrumbs 是Yii的路径插件,使用方法:
<?php $this->widget('zii.widgets.CBreadcrumbs', array('links'=>$this->breadcrumbs,)); ?> 
在视图里设置路径信息(在生成Yii 程序里,都会自动产生这些代码,注册掉的部分是自动生成的):
<?php
$this->breadcrumbs = array(
    //$this->module->id,
     '系统设置'
);
?>
但是因为这个东东是老外写的,所以路径的开头总是以 Home 开头,就像这样 Home >> 系统设置
通过为 CBreadcrumbs 添加一个属性,可以很简单的解决这个问题
1、打开代码文件: yiiframework/zii/widgets/CBreadcrumbs.php
2、在打开文件的第 48 行下方添加代码: public $rootName = 'Home';
3、修改第 104 行代码
$links[]=CHtml::link(Yii::t('zii','Home'),Yii::app()->homeUrl);
为:$links[]=CHtml::link(Yii::t('zii',$this->rootName),Yii::app()->homeUrl);
4、调用方法: <?php $this->widget('zii.widgets.CBreadcrumbs',array('rootName'=>'管理系统','links'=>$this->breadcrumbs,)); ?>
原理:其实就是为插件添加了一件属性,来代替之前固化的开始处字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值