我一直在玩Codeigniter创建一个电子商务网站,我正在努力做到以下几点:
将类别名称作为第一个参数,例如
/tshirts
/shoes
以下每一项都是过滤器(在类别上)或产品(在SEO的URL中有类别)
/tshirts/filter/price/0-20
/tshirts/pink-with-blue-spots
我目前在路由中做的是:
$route['tshirts'] = 'category/index';
$route['tshirts/(filter|sort)'] = 'category/index';
$route['tshirts/(filter|sort)/:any'] = 'category/index/filter';
$route['tshirts/:any'] = 'product/index';
我想将前两行合并为一条,因为它们正在访问相同的控制器和方法。
第二行是有人在/filter/
之后移除部分,并且可能与另一条路线合并。
最后一个路由表示第二个参数是产品名称,因此必须传递给产品控制器。
我一直在玩http://gskinner.com/RegExr/并提出以下内容,这可能很接近,我想我只需要将括号中的部分作为选项(它正在拾取正确的路线,除了没有任何路线的路线)第二个参数),但我不知道如何。
category/?(filter|sort|page)
谢谢!
答案 0 :(得分:5)
今天快速浏览一下,现在已经结合了
$route['tshirts/(filter|sort)'] = 'category/index';
$route['tshirts/(filter|sort)/:any'] = 'category/index/filter';
到
$route['tshirts(/(filter|sort|page)(/(:any))?)?'] = "category/index/$4";
在类别控制器的index($filter = null)
方法中,使用$filter != null
查看是否需要应用过滤规则。
答案 1 :(得分:3)
我不熟悉CodeIgniter路由的语法。但试试这个:
$route['tshirts(/(filter|sort))?'] = 'category/index';
如果支持非捕获组:
$route['tshirts(?:/(filter|sort))?'] = 'category/index';