2011-05-09 34 views
0

我不知道这是否可能。我已经尝试了很多不同的正则表达式组合,我什么都没有想到。所以,这是我的问题...复杂/不可能Zend_Router_Route_Regex具有类别层次结构的产品页面吗?

我有一个产品页面,需要显示基于类别的产品(可以嵌套到无限,但最有可能的3个级别最大),排序列(订单,ASC或DESC),过滤器(即制造商,这将是键/值对),标签(可包含空格的单词(\ w)的简单列表),以及最后一页。

此分类是上述唯一必需的选项。当然,上面的每个变量都需要被捕获到一个数组中进行处理。

实例网址:

http://mydomain.com/products/Home/Bedroom/Beds/sort/price/desc/filters/manufacturer/ikea/size/king/tags/black/lowprofile/wood/green/page/2

会使:

category => Home/Bedroom/Beds 
sort_by => price 
sort_order => desc 
manufacturer => ikea 
size => king 
tags => Array('black','lowprofile','wood','green') 
page => 2 

我敢肯定,我生活在梦幻世界里,这个表达式是可能的。或者我正在以错误的方式看待它。很可能,因为我一直在盯着它很长一段时间。

任何接受者?我只会在这里把我的头撞在墙上。

回答

1

创建一个自定义路线去除所有预期变量。

你的新路线应该尽量匹配

产品/ * /参数1 /值1 /参数2/VALUE2 /等。

如果你知道第一个参数名称是什么,或者甚至是其中的任何一个,那么你可以开始删除那些应该留给你什么是动态的URL的部分(用/,循环展开,打破第一个已知参数) 。

这里有真正创建一个自定义路线的解释: how to get dynamic URL like mydomain.com/username using zend framework

1

IMO你做了错误的方式。你应该有一个“干净”的路线:

/products/* 

如果路线匹配,得到了$_SERVER['request_uri'],剥去从一开始/products/并解析类。以“form”语法添加参数(?param1=a&param2=b)。

+0

将过滤参数作为URL的一部分对seo IMO不利。不同的过滤器可能会生成重复的内容(按标签过滤“adidas”返回的结果与生产商“adidas”的过滤器相同 - 但在不同的URL上) – 2011-05-10 14:12:36