2010-02-16 72 views
0

我正在編寫一個應用程序,允許您根據位置和類別篩選數據庫結果。如何爲多個變量設置Code Igniter URI段?

如果有人要在高爾夫球類別下搜索利物浦,那麼URI將是/index.php/search/Liverpool/Golf

如果有人想要的位置,但並不類別進行搜索,他們將被送往/index.php/search/Liverpool

但是,如果有人想只按類別篩選,他們將無法使用/index.php/search/Golf,因爲這將由位置被抓搜索。

有沒有最佳實踐方法讓/index.php/search/Golf得到認可?還有哪些最佳做法可以添加到URI中以使這兩個查詢有所區別?或許?

雖然這是開始顯示/index.php?search&category=Golf這正是我想要避免的特徵。

+1

好像'/ index.php/search/category/Golf'就夠了。這就像標籤 – Darmen 2010-02-16 11:32:42

回答

0

無論他們在搜索什麼,最好保持你的URI段相關。

index.php/LOCATION/CATEGORY 

如果他們不感興趣的位置,然後通過一個填料系統:

index.php/anywhere/golf 

然後在你的代碼只是檢查任何地方的特定字符串來確定,如果他們只是想看到活動。我假設你將用鏈接或論壇重定向他們(並且他們沒有自己輸入URI字符串),所以你應該安全地傳遞你期望和測試的信息。

+0

我要和這 'index.php/search/All/All/Golf' – Matthew 2010-02-16 18:07:55

+0

@Matt - 我認爲你會滿意的這樣做..你的uri位置(第一/第二/第三)基本上取代舊學校中的關鍵字GET string key = value pair。 – Shane 2010-02-16 18:13:30

2

嘗試使用$這個 - > URI-> uri_to_assoc(N)這裏所描述http://codeigniter.com/user_guide/libraries/uri.html(半一路下滑頁)

基本上你將構建您的網址是這樣的:

mysite.com /index.php/search/location/liverpool/category/golf

注:該參數是可選的,所以你不必有兩個在那裏所有的時間。你可以一樣好做

mysite.com/index.php/search/location/liverpool/ 和

mysite.com/index.php/search/category/golf

這樣,如果你正在尋找的元素不存在,它將返回FALSE

+0

這是實現它的最好方式,因爲它維護GET變量的鍵/值對,而沒有令人討厭的語法。 – 2010-02-17 09:59:08

0

我使用上面Tom建議的格式,然後按照下面的方法做一些事情來確定參數的值。

$segment_array = $this->uri->segment_array();   
$is_location_searched = array_search('location', $segment_array); 
if($is_location_searched && $this->uri->segment($is_location_searched +1)) 
{ 
    $location = $this->uri->segment($is_sorted+1); 
} 
+0

錯過了Toms使用$ this-> uri-> uri_to_assoc(n)的建議,它看起來比我上面的代碼更清潔,但最終卻是相同的URL結構。 – 2010-02-17 16:03:34

0

看看http://lucenebook.com/#/p:solr/s:wiki,然後在左側導航欄中點擊一下。密切關注當您執行此操作時在網址中發生的情況。我很喜歡這個方案,原因很多。

  1. 這是搜索引擎優化。
  2. 「好奇」的人可以混合/匹配的網址,它仍然解決了適當的搜索。
  3. 它看起來不錯!

當然,訣竅是真的在代碼中,在你如何構建的東西。我花了幾個星期才把它整理出來,但我終於有了自己的版本。只是不是基於Ajax的,因爲我喜歡搜索引擎比Ajax更好。阿賈克斯不支付賬單。