关于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 来判断路由中是否存在当前请求的模块或控制器的路径,从而达到获取激活菜单项的目的。
一、在使用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的菜单插件CMenu和面包屑breadcrumbs路径管理插件的一些使用问题
- 关于YII的菜单插件 CMenu和面包末breadcrumbs路径管理插件的一些使用问题
- 关于YII的菜单插件 CMenu - 和 面包末 breadcrumbs - 路径管理插件 的一些使用问题
- 关于YII的菜单插件 CMenu - 和 面包末 breadcrumbs - 路径管理插件 的一些.
- 关于jquery.AutoComplete插件的一些使用心得(编码问题,效率问题)
- 关于Xcode一些常用插件的安装使用问题
- 关于使用ISA代理导致一些网上银行出现不能正常打开的问题
- 关于用c生成的dll在使用其他供应商的工具创建可执行模块时遇到的一些问题
- 关于使用OpenLayers的透明图层叠加的一些问题
- 关于dao得一些使用问题,以备忘....也用来纪念自己解决得第一个内存泄漏问题
- 关于使用ISA代理导致一些网上银行出现不能正常打开的问题
- 关于使用OpenLayers的透明图层叠加的一些问题
- 关于一些core dump的问题,makefile以及gdb的使用问题
- 关于C++Builder 2007使用dbexpress + mysql的一些问题
- 关于使用性能测试工具的一些想法和问题
- 一些关于style和attr的使用问题
- C++Builder中关于INDY库的使用 以及一些问题的解决(E2238 Multiple declaration for 'fd_set')
- 关于多站点一些控件不能正常使用问题
- 关于在Windows Mobile下今日插件使用WTL的问题
- 关于使用struts2-jquery-mobile-showcase插件报错的问题!!!