【问题标题】:complex/impossible Zend_Router_Route_Regex for product page with category hierarchy?具有类别层次结构的产品页面的复杂/不可能的 Zend_Router_Route_Regex?
【发布时间】:2011-05-09 22:13:07
【问题描述】:

我不知道这是否可能。我尝试了很多不同的正则表达式组合,但一无所获。所以,这是我的问题...

我有一个产品页面,需要根据类别(可以嵌套到无限,但很可能最多 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

我很确定我生活在一个梦想的世界里,这个 Regex 是可能的。或者,也许我看错了。很有可能,因为我已经盯着它看了很长时间了。

有接受者吗?我会在这里用头撞墙。

【问题讨论】:

    标签: php regex zend-framework routing


    【解决方案1】:

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

    您的新路线应该尝试匹配

    products/*/param1/value1/param2/value2/etc.

    如果您知道第一个参数名称是什么,甚至其中任何一个,您就可以开始剥离 URL 的片段,这些片段应该让您得到动态的内容(用 / 展开,循环,在第一个已知参数上中断)。

    以下是实际创建自定义路由的说明: how to get dynamic URL like mydomain.com/username using zend framework

    【讨论】:

      【解决方案2】:

      IMO 你做错了。你应该有一个“更清洁”的路线:

      /products/*
      

      如果路由匹配,则获取$_SERVER['request_uri'],从开头剥离/products/并解析类别。以“form”语法(?param1=a&param2=b)添加参数。

      【讨论】:

      • 将过滤器参数作为 URL 的一部分对 seo IMO 不利。不同的过滤器可能会生成重复的内容(按标签“adidas”过滤返回的结果与按生产者“adidas”过滤的结果相同 - 但在不同的 URL 上)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 2011-10-16
      • 2022-08-20
      • 1970-01-01
      • 2010-09-16
      • 2015-07-01
      • 2011-04-01
      相关资源
      最近更新 更多