在使用 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;
}
注:具体位置可能错误,找到文件后,可以通过搜索定位到该行
转载请注明:cooljun小窝 » YII Cmenu 活动菜单激活问题