我一直在尝试使用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';
我想将前两行合并为一个,因为它们正在访问相同的 Controller 和方法。
第二行是在有人删除
/filter/
之后的零件的情况下出现的,并且有可能与其他路线合并。最后一条路线表示第二个参数是产品名称,因此必须传递给产品 Controller 。
我一直在使用http://gskinner.com/RegExr/并提出以下内容(可能很接近),认为我只需要使方括号中的部分为可选(它选择了正确的路线,除了没有任何第二个参数的路线之外),但是我我不确定该怎么做。
category/?(filter|sort|page)
谢谢!
最佳答案
我对CodeIgniter路由的语法不熟悉。但是尝试一下:
$route['tshirts(/(filter|sort))?'] = 'category/index';
并且如果支持非捕获组:
$route['tshirts(?:/(filter|sort))?'] = 'category/index';