轻量级前端框架助力开发者提升项目效率与性能
770
2022-10-06
关于YII的菜单插件 CMenu和面包末breadcrumbs路径管理插件的一些使用问题
在使用 YIi的路径管理工具时,发现了一个问题。
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.php2.找到代码第 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的路径插件,使用方法 :
widget('zii.widgets.CBreadcrumbs', array('links'=>$this->breadcrumbs,)); ?>在视图里设置路径信息(在生成Yii程序里,都会自动产生这些代码,注册掉的部分是自动生成的):breadcrumbs=array(//$this->module->id, '系统设置');?>
但是因为这个东东是老外写的,所以路径的开头总是以 Home 开头,就像这样Home » 系统设置通过为CBreadcrumbs添加一个属性,可以很简单的解决这个问题1. 打开代码文件 : yiiframework/zii/widgets/CBreadcrumbs.php2.在打开文件 的第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.调用方法 :widget('zii.widgets.CBreadcrumbs', array('rootName'=>'管理系统','links'=>$this->breadcrumbs,)); ?>原理:其实就是为插件添加了一件属性,来代替之前固化的开始处字符。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~