当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

关于YII的菜单插件 CMenu和面包末breadcrumbs路径管理插件的一些使用问题

发表于: 2013-03-20   作者:dcj3sjt126com   来源:转载   浏览:
摘要: 在使用 YIi的路径管理工具时,发现了一个问题。                    <?php         

在使用 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;
}

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,)); ?>

原理:其实就是为插件添加了一件属性,来代替之前固化的开始处字符。

关于YII的菜单插件 CMenu和面包末breadcrumbs路径管理插件的一些使用问题

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Jenkins中关于一些插件的使用方法 最近在为公司搭建CI平台过程中,以及在具体项目实施过程中使用过
1. 从github下载yii-debug-toolbar源码:https://github.com/malyshev/yii-debug-toolbar/downloads
1. 从github下载yii-debug-toolbar源码:https://github.com/malyshev/yii-debug-toolbar/downloads
今天自己试了一下esayui的使用,但是试了几次仍不成功,而且反反复复查了几次代码都没有问题,后来发现
eclipse在线安装Maven的正确路径为:http://download.eclipse.org/technology/m2e/releases 在网上
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnbl
今天使用Jira的时候遇到一些问题,搜索的时候无意中发现有一个插件Mylyn可以管理Jira中的bug,于是
最近在为公司搭建CI平台过程中,以及在具体项目实施过程中使用过的一些插件的具体用法: 1. ant插件
关于这个插件,妹的,第一次使用坑死爹了,各种不会,幸亏我有持之以恒的精神,最终还是让其臣服于
参考: http://chaoyueg.blog.163.com/blog/static/9706739220120910570755/ Easyui window css - z
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号