2012-08-06 24 views
2

我有一個小問題。如何使用php和Codeigniter存儲搜索條件?

我已經使用CodeIgniter框架在PHP中編寫了一個完整的網站。我的模塊之一是搜索模塊,它包含帶關鍵字的文本輸入和帶有過濾標準的三個選擇列表。

沒關係,當我在尋找的東西 - 結果的列表分頁是通過URL來完成這樣的:

mysite.com/$keyword/$criteria1/$criteria2/$criteria3/$offset 

的作品就像一個魅力。

但是當我進入我的一個圖像(它是圖像庫)時,我想要有一個選項可以從我的搜索結果中進入下一個和上一個圖像 - 我從該圖像輸入的圖像。

我現在用這種方法解決這個問題 - 我有一個名爲'search_conditions'的會話表,我將關鍵字和我的三個標準的值存儲在那裏,但這很不舒服,因爲如果有人打開第二個窗口並在那裏搜索別的東西?

然後,在另一個窗口或選項卡中的所有搜索都會得到相同的條件 - 因爲每次新搜索,用戶都會覆蓋會話值。

我的下一個和以前的功能:

public function next($count) 
{ 
    $search = $this->session->userdata('search_conditions'); //getting session table and overwriting it 

    $catid = isset($search['catid'])?$search['catid']:'0'; 
    $brandid = isset($search['brandid'])?$search['brandid']:'0'; 
    $prodid = isset($search['prodid'])?$search['prodid']:'0'; 
    $keyword = isset($search['keyword'])?$search['keyword']:''; 

    $res = $this->search_model->main_search($keyword, $catid, $brandid, $prodid, $count, 1);  
} 



public function previous($count) 
{ 
    $search = $this->session->userdata('search_conditions'); 

    $catid = isset($search['catid'])?$search['catid']:'0'; 
    $brandid = isset($search['brandid'])?$search['brandid']:'0'; 
    $prodid = isset($search['prodid'])?$search['prodid']:'0'; 
    $keyword = isset($search['keyword'])?$search['keyword']:''; 

    $res = $this->search_model->main_search($keyword, $catid, $brandid, $prodid, $count-2, 1);  

} 

你能給我推薦一些其他的,更舒適的解決方案,因爲這似乎不是很好... :)

謝謝!

回答

2

添加一個索引到$search_conditions變量:

$search_conditions[1]['catid'] 
$search_conditions[1]['brandid'] 
... 

然後參考將其與控制器的或配置變量。這樣您可以允許一個會話存儲多個搜索條件。

但我建議你在會話中刪除存儲搜索條件。相反,只需將它傳遞給URI即可。在你描述的情況下,會話數據作爲中介工作;你不需要它。使用Pagination Class並通過搜索頁方向(nextprevious)到URI。
不要擔心URI可能看起來很醜 - 它只取決於用戶搜索的內容,並且它仍然很友好。你唯一擔心的是GET字符串不能擴展limited length

+0

是的,我試圖做到這一點:)我的網址看起來像:mysite.com/image/id/keyword/crit1/crit2/crit3/offset:) - 相當長,是吧? – pawel 2012-08-06 22:52:30

+0

@pawel不錯。看看SO或Google搜索URI的外觀如何:) – bostaf 2012-08-06 23:01:53

+0

我在網址上做過一個工作:)dzieki! :) – pawel 2012-08-06 23:22:27

2

從您的next()和previous()函數中的URI中拉出段。使用codeigniter URL助手。這應該允許您將不同的搜索條件作爲變量傳遞到下一頁,這也將消除您使用會話的需要。

+0

我想過了,我的網站看起來像是'site.com/image/next/keyword/crit1/crit2/crti3/offset',沒關係 - 但是如何將這些標準傳入我的圖片頁面?有了網址呢?它看起來很醜:) – pawel 2012-08-06 22:06:58

+0

完美的地方使用Ajax! – korono89 2012-08-07 17:14:58

相關問題