2012-04-16 75 views
0

我試圖在我的列表中添加搜索。我正在使用codeigniter和分頁列表。搜索只是數據庫搜索的示例ID。該搜索在分頁的第一頁中完美呈現。但是當涉及到其他頁面時,它不起作用。搜索在codeigniter中無法使用分頁

這是我的控制器的代碼。

$this->clear_sample_id_catche(); 
    $out=$this->Mgeneral->listData(); 
    $per_page = 10; 
    $total = $this->Mgeneral->countData(); 
    $data = $this->Mgeneral->listData($per_page, $this->uri->segment(3)); 

    $base_url = site_url('general/listData'); 

    $config['base_url'] = $base_url; 
    $config['total_rows'] = $total; 
    $config['per_page'] = $per_page; 
    $config['uri_segment'] = '3'; 

    $this->pagination->initialize($config); 
    $data=array('body'=>'list','out'=>$data); 

    $this->load->view('template',$data); 

我添加了表單來搜索我的視圖。 任何人都可以提出我的問題是什麼? 在此先感謝。

+0

我沒有看到您的代碼中的任何搜索參數,我認爲這是您可能通過發佈數據使用它的問題,但codeigniters分頁是重定向基礎,因此您在下一次請求時失去了搜索參數。 – 2012-04-16 07:24:51

+1

用於分頁搜索,您必須使用get方法或將張貼的搜索參數存儲在表單中的隱藏字段中,因此下一頁將攜帶搜索參數 – Broncha 2012-04-16 07:29:09

回答

4

您必須忘記傳遞分頁的搜索查詢。看到頁碼是如何查詢字符串的第三部分,我猜測搜索表單會在用戶提交時執行POST操作。用戶提交表單後,當然會起作用。因爲他們只是做了POST請求,並且您通過使用$this->input->post('user_input')或類似的東西從$_POST獲取搜索查詢。但是,當他們嘗試通過單擊頁碼鏈接(這是一個GET請求)導航到另一個頁面時,搜索失敗,因爲超全球$_POST數組爲空。

解決此問題的一個解決方案是根據用戶輸入設置會話值(我建議您使用CodeIgniter的會話類),而不是使用$_POST中的搜索查詢,而是使用會話中存儲的會話值。

另一種方法是爲搜索結果製作另一個頁面(假設它當前與窗體位於同一頁面,即在同一控制器功能中)。然後使搜索表單對其自己的控制器功能執行GET請求,然後將該請求編碼爲base64中的搜索查詢,並用.替換編碼字符串中的=(等號)。之後,將用戶重定向到搜索結果頁面,同時將編碼的搜索查詢作爲URL查詢字符串中的第三個段(頁碼將是第四個)傳遞。然後在該函數中將.替換回=並使用base64_decode()獲取搜索查詢並將其傳遞給將生成搜索結果的函數。

當然,還有很多其他方法可以實現相同的結果。只是谷歌它。

+0

感謝我使用的每一個get方法,現在我解決了我的問題。十分感謝你的幫助。 – 2012-04-16 09:34:00