php-ci-route CI的URI路由使用

CI开发商品列表页时,可以使用CI框架自带的URI路由,这样可以避免在apache中做伪静态规则,程序如果迁移,就不用改apache配置。

如何用CI框架URI 路由:

列表页:

TODO:

  • [ ] 筛选面板的a标签href如何产生。
  • [ ] 把my_helper中的getListHref写成灵活的类。

URL实例
products.ljlj.cc/
list-brand100-category120-attr12-factor30-search红苹果-page9-sort1.html

解释:brand代表品牌,category商品分类,attr后面分别是商品属性的id,factor素数因子的乘机,search代表搜索的关键词(即商品名称),page代表当前分页数,sort代表排序字段(1代表销量、2代表浏览量,3代表新品)。
同时商品属性id和传递“素数因子的乘机”,每个属性的href的factor直接算出“素数因子的乘机”,如:2×3×5=30。
利用任何一个整数都能拆分成几个素数的乘机的特性,可以实现商品属性的联合选择,如:绿色、木质、带躺位的沙发。
factor用于列表页的筛选面板。mysql的取余函数:mod,如:5 mod 2 = 1。

注:用户没有选择brand时,也要用0占位。

路由规则定义在application/config/routes.php 文件中
CI的URI路由规则
$route[‘list-brand(:num)-category(:num)-attr(:num)-factor(:num)-search(:any)-page(:num)-sort(:num).html’]
= “list/index/$1/$2/$3/$4/$5/$6/$7”;
如何获得参数:

1
2
3
4
function index($brand, $category, $attr, $factor, $search, $page, $sort)
{

var_dump($brand, $category, $attr, $factor, $search, $page, $sort);
}

1
2
3
4
5
6
7
8
9
//helper
function getHref($name, $id)
{

$url = 'list-brand0-1cate0-2cate0-3cate0-attr0-factor0-search0-page1-sort1.html';
$defaultId = 0;
if( 'page'==$name || 'sort'==$name ) $defaultId = 1;
$urlNew = str_replace($name.$id, $name.$defaultId, $url);
return base_url($urlNew);
}

PS:
测试代码