2010-06-11 85 views
4

我有一個/付款界面,用戶應該能夠通過價格範圍,銀行和其他內容進行過濾。這些過濾器是標準選擇框。當我提交過濾器表單時,所有發佈數據都會轉到另一種稱爲付款/搜索的方法。該方法執行驗證,將帖子值保存到會話flashdata中,並將用戶重定向回/通過URL傳遞flashdata名稱的付款。使用CodeIgniter分頁時丟失URI段

所以我沒有過濾器的標準分頁鏈接是完全一樣的:

payments/index/20/ 
payments/index/40/ 
payments/index/60/ 

如果您提交的過濾器的形式,返回的網址是:

payments/index/0/b48c7cbd5489129a337b0a24f830fd93 

這工作好了。如果我改變其他東西的零點,它可以很好地分頁。但唯一的問題是,頁面鏈接不會在分頁偏移之後保留哈希值。 CodeIgniter生成的頁面鏈接忽略了額外的uri段。

我uri_segment配置已被設置爲3:

$config['uri_segment'] = 3; 

因爲散列可能會或可能不會存在,我無法設置uri_segment 4。我如何解決這個問題的任何想法? CI是否必須將偏移量作爲uri中的最後一個段落?也許我正在嘗試一個不正確的方法,所以我都耳聞。

謝謝大家。

編輯:爲什麼我通過uri傳遞flashdata名稱,你可能會問?因爲它允許用戶打開多個瀏覽器選項卡並在每個選項卡中執行不同的搜索。對於你做的每個過濾,都會生成一個新的flashdata var。

+0

嗨。我想問你,你是如何實現過濾器的散列?我也有過濾器和分頁,我喜歡你的解決方案。謝謝! – 2011-10-02 14:27:19

回答

2

只爲用戶從谷歌的到來,這裏是解決方案:

在分頁配置陣列,我改變了我的BASE_URL此:

$config['base_url'] = site_url('payments/index/' . $this->uri->segment(3) . '/' . $this->uri->segment(4)); 

哪裏段(3)是我的補償號段(4)是散列。所以,在這種情況下,散列可能存在也可能不存在,並且分頁仍然有效。

另一種方法可能是這樣的:如果您使用付款方式,並且網址中沒有flashdata ID,則會將用戶重定向到payments/search並使用空過濾器創建一個空數組。然後它重新導向付款/ _NEW_FLASHDATA_ID_HERE_。這樣,該URL將始終在URL中具有Flashdata ID,並且您可以像往常一樣在最後一個URI段中將分頁偏移。

1

爲什麼不將散列設置爲會話項?然後

$this->session->set_userdata('session_flashdata_hash', $hash); 

哈希將一直持續到你取消它

$this->session->unset_userdata('session_flashdata_hash'); 

,或者直到你破壞了會議。

$this->session->sess_destroy(); 
+0

爲什麼我通過uri傳遞flashdata名稱,你可能會問?因爲它允許用戶打開多個瀏覽器選項卡並在每個選項卡中執行不同的搜索。對於你做的每個過濾,都會生成一個新的flashdata var。 – 2010-06-12 15:41:24

1

爲什麼不檢查哈希是否存在,並根據該值設置uri_segment