2011-05-09 61 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