您的位置:首页 > 编程语言 > PHP开发

关于Yii的菜单插件CMenu一些使用问题

2014-10-28 14:42 411 查看
原文地址:关于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 来判断路由中是否存在当前请求的模块或控制器的路径,从而达到获取激活菜单项的目的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐