YII的自定义路由规则类的使用(初级)
2015-09-15 13:46
666 查看
发现网上的yii自定义路由规则类的使用介绍比较少
前两天做了网站SEO方面的URL优化工作。
具体要求是:商城门店的URL中需要有门店的地区id和分页p出现,
如:http://www.abc.com/store-provinceid(门店地区id)-p(分页数).html
本人分享自己的使用心得
对于复杂的url美化,yii可以设置url 规则类的使用
第一步:mian.php中urlManage配置中rules数组中添加规则时可以添加一个规则
这个StoreUrlRule必须继承CBaseUrlRule这个类,自定义类必须实现基类中createUrl和parseUrl2个方法
createUrl这个方法在控制器中$this->createUrl('store/index',$this->parameter)可以调用到,在分页类中可以用Yii::app()->createUrl('store/index',$this->parameter)这个方法动态调用
具体要求是:商城门店的URL中需要有门店的地区拼音和分页p出现,
如:http://www.abc.com/store-拼音(门店地区拼音)-p(分页数).html
在createUrl()中先修改$params(将id转换为地区pinyin,转换后如果有多余的参数,可以unset掉。);
在parseUrl()中解析完$params后,添加地区拼音转id的代码。
需要在规则类中添加一个方法获取所有地区id和对应的拼音
前两天做了网站SEO方面的URL优化工作。
具体要求是:商城门店的URL中需要有门店的地区id和分页p出现,
如:http://www.abc.com/store-provinceid(门店地区id)-p(分页数).html
本人分享自己的使用心得
对于复杂的url美化,yii可以设置url 规则类的使用
第一步:mian.php中urlManage配置中rules数组中添加规则时可以添加一个规则
array( 'class' => 'application.components.StoreUrlRule', ),第二步:在conponents 文件下创一个自定义的规则类,例如StoreUrlRule.PHP
这个StoreUrlRule必须继承CBaseUrlRule这个类,自定义类必须实现基类中createUrl和parseUrl2个方法
createUrl这个方法在控制器中$this->createUrl('store/index',$this->parameter)可以调用到,在分页类中可以用Yii::app()->createUrl('store/index',$this->parameter)这个方法动态调用
public function createUrl($manager,$route,$params,$ampersand) { if ($route=='store/index') { if (isset($params['province'], $params['p'])) return 'store-'.$params['province'] . '-' . $params['p'].'.html'; else if (isset($params['province'])) return 'store-'.$params['province']; } // return false; // this rule does not apply } public function parseUrl($manager, $request,$pathInfo,$rawPathInfo) { if (preg_match('/^(\w+)(-(\d+))(-(\d+))?$/', $pathInfo, $matches)) { $province=$matches[3]; if(!empty($matches[5])){ $p=$matches[5]; } // There is a match from db check above if(isset($p)){ $_GET['p']=$p; $_GET['province']=$province; return 'web110/store/index'; }else{ $_GET['province']=$province; return 'web110/store/index'; } } }在这个规则类中还可以完成更变态的url,例如:
具体要求是:商城门店的URL中需要有门店的地区拼音和分页p出现,
如:http://www.abc.com/store-拼音(门店地区拼音)-p(分页数).html
在createUrl()中先修改$params(将id转换为地区pinyin,转换后如果有多余的参数,可以unset掉。);
在parseUrl()中解析完$params后,添加地区拼音转id的代码。
需要在规则类中添加一个方法获取所有地区id和对应的拼音
protected function getRegionNames() { $store = new B2cStore(); $result = $store->getAllRegions(); return $result; }在createurl方法中添加
$regions = CHtml::listData($this->getRegionNames(),'region_id','local_name');YII内置方法listData将二维数组转换为region_id与拼音对应的一维数组
<span style="color:#333333;">if (isset($params['province'], $params['p'])) return 'store-'</span><span style="color:#ff6666;">.$regions[$params['province']]</span><span style="color:#333333;"> . '-' . $params['p'].'.html'; else if (isset($params['province'])) return 'store-'.</span><span style="color:#ff6666;">$regions[$params['province']</span><span style="color:#333333;">];</span>即可 解析同创建 ,本人初学yii,更深度的挖掘http://my.oschina.net/liuxiaobo/blog/202568
相关文章推荐
- Yii PHP Framework实用入门教程(详细介绍)
- Yii操作数据库的3种方法
- 在yii中新增一个用户验证的方法详解
- Yii框架在页面输出执行sql语句以方便调试的实现方法
- 浅析Yii中使用RBAC的完全指南(用户角色权限控制)
- yii中widget的用法
- Yii实现自动加载类地图的方法
- Yii配置文件用法详解
- yiic命令时提示“php.exe”不是内部或外部命令的解决方法
- 详细解读PHP的Yii框架中登陆功能的实现
- Yii扩展组件编写方法实例分析
- Yii获取当前url和域名的方法
- Yii核心组件AssetManager原理分析
- yii操作session实例简介
- PHP的Yii框架的基本使用示例
- Yii使用ajax验证显示错误messagebox的解决方法
- Yii中使用PHPExcel导出Excel的方法
- Yii入门教程之Yii安装及hello world
- Yii学习总结之安装配置
- yii实现图片上传及缩略图生成的方法