2010-01-22 52 views
0

我試圖使用多個搜索條件來實現分頁。 假設我有學生表。當學生列表顯示時,我也使用分頁。 分頁鏈接是。 site_url . '/student/page/';所以我用$config['uri_segment'] = 1; 所以分頁鏈接將是如何在codeigniter中使用多個搜索條件實現分頁

<a href="http://mysite/index.php/student/page/0">1</a> 
<a href="http://mysite/index.php/student/page/1">2</a> 

和兒子。

之後,我想使用3個使用textfield實現的搜索條件來搜索學生數據。

id name address. 

用戶可以通過id或名稱或地址或三個標準的組合進行搜索。 url變成

http://mysite/index.php/student/page/0 
href=http://mysite/index.php/student/page/1 

和兒子。

但我使用get方法進行搜索。並嘗試使用搜索條件字段搜索時,url變爲

href="http://mysite/index.php/student/page/1?id=1&name=a&address=b 

當我嘗試根據條件創建分頁時發生問題。因爲分頁鏈接都包含查詢字符串 我不知道如何創建成爲

href="http://mysite/index.php/student/page/0?id=1&name=a&address=b 
href="http://mysite/index.php/student/page/1?id=1&name=a&address=b 

或者你有解決這個問題的最佳做法?


爲了解決這個問題,我嘗試使用$this->uri->uri_to_assoc()。首先,我爲分頁鏈接創建數組asocc。

$array = array('id' => '001', 'name' => 'a', 'address' => 'canada'); 

的URL成爲 id/001/name/a/address/canada。我使用$this->uri->uri_to_assoc()函數來獲取段的關鍵和值。

array (
    id => 001, 
    name=>a, 
    address=>canada 
) 

但是雖然有一些搜索條件,而不包括搜索時。比方說,用戶只能按名稱和地址搜索。該陣列成爲 $array = array('id' => '', 'name' => 'a', 'address' => 'canada');和URL id/name/a/address/canada assoc命令陣列成爲

array (
    id => name, 
    a=>address, 
    canada=> 
) 

assoc命令陣列不再雜亂無章。所以我無法獲得assoc數組的正確值。 我想我會設置標識符的搜索條件,如果不包括在內。假設我把#

if isset($_GET['id']) then 
$id = '#' 
else 
$id = $_GET['id'] 

$array = array('id' => $id, 'name' => 'a', 'address' => 'canada'); 

那怎麼樣......?或者如果還有其他最佳做法?

謝謝

回答

0

我一直覺得在ci中處理uri有點痛苦。
如果用戶沒有將其作爲搜索的一部分包含在內,您是否可以爲您的值設置某種默認值?甚至不包括關鍵?所以它會返回類似

id/10/name/false/address/canada 

id/10/address/canada 

那麼你可以

$uri = $this->uri->uri_to_assoc(); 

$id = array_key_exists("id", $uri) ? $uri['id'] : false; 
$id = $id == 'false' ? false : $id; 
$query .= $id ? "AND id = $id" : ""; 

等等

0

當我使用uri_to_assoc,我總是有一個默認的陣列,所以在我的應用程序中,我總是可以獲得所需的參數,即使它從uri

$param_default = array('cat','page'); 
$param_array = $this->uri->ruri_to_assoc(3, $param_default); 

現在我可以放心地訪問$param_array['cat']$param_array['page']即使URI中不包含該參數。

我總是用戶ruri_to_assocruri_segment,所以額外的參數總是從第3個uri段開始。