2011-11-22 53 views
0

我是codeigniter新手。希望可以幫助解決codeigniter分頁問題。用選定記錄進行codeigniter分頁

  1. 我從我的視圖中選擇了一些記錄,並使用$ _POST傳遞給我的控制器。
  2. 控制器將使用$ _POST變量從模型中選擇記錄。
  3. 然後記錄將顯示在與分頁相同的視圖。

步驟1-3是okey,視圖顯示正確的信息。

  1. 從我的視圖按下分頁按鈕時。這將調用相同的控制器,但$ _POST信息將變爲空白。所以,我的視圖不會根據需要顯示選定的記錄。

希望能幫到忙。

我已經到簡體的代碼如下: -

控制器:

$config['total_rows']=$this->invdata_model->getFilterData_numRows(); 

    $config['base_url']=site_url('site/users_area') ; 
    $config['uri_segment'] = '3'; 
    $config['per_page']=18; 
    $config['num_links']=4; 

    $this->pagination->initialize($config); 

    $data['records']=$this->invdata_model->getFilterData_Rows($config['per_page'],$this->uri->segment(3)); 
    $data['rec_country']=$this->invdata_model->country(); 

    $this->load->view('includes/header'); 
    $this->load->view('users_area_view',$data); 
    $this->load->view('includes/footer'); 

型號:

$country = $this->input->post('country') ; 


    $this->db->select('stockno, bdlno, country,volton'); 
    if (isset($country)) { $this->db->where_in('country',$country); } 
    $q=$this->db->get('inventory')->num_rows(); 

    return $q ; 

查看

<?php echo form_open('site/users_area'); 
     echo $this->table->generate($records); 
     echo $this->pagination->create_links() ; ?> 

    <div class="gadget"> 
<?php echo form_submit('submit','Apply','class="button_form"'); ?>  
    </div> 

    $gadget['gadget_name']='country'; 
    $gadget['gadget_rec']=$rec_country; 
    $this->load->view('gadget',$gadget); 
    </form> 

查看小工具

<div class="gadget"> 
    <?php 

    $gadget_name2=$gadget_name.'[]'; 

    echo "<ul>"; 
    foreach ($gadget_rec as $item) { 
    echo '<li >'; 
    echo '<div id="sectionname">'.$item.'</div>'; 
    echo '<div id="sectioninput"><input type="checkbox" name="'.$gadget_name2.'" value="'.$item.'"></div>' ; 
    echo '-'; 
    echo "</li>"; 
    } 

    echo "<ul>"; 
    ?> 
    </div> 

謝謝。

+0

你可以把你的文件的例子和你如何傳遞數據? –

+0

包括示例代碼 –

回答

1

這聽起來像一個方法問題。爲什麼使用POST數據來過濾數據?分頁庫建立一個查詢字符串來確定數據庫查詢結果的偏移量。爲什麼你不能使用$ _GET而不是$ _POST?

我想這將有可能你的分頁配置「BASE_URL」設置這樣:

$this->load->helper('url'); 
$this->load->library('pagination'); 

$config['base_url'] = current_url().'?'.http_build_query($_POST); 
$config['total_rows'] = 200; 
$config['per_page'] = 20; 

$this->pagination->initialize($config); 

echo $this->pagination->create_links(); 

然後在你的控制器,使用$這個 - >輸入 - > get_post(),而不是$這 - >輸入 - >柱()。在這裏要小心 - 將完整的發佈數據直接傳遞給模型進行處理是很少安全的。這將是更好地使用CI的輸入級,以防止XSS攻擊......

UPDATE:

要使用CI的輸入級,而不是$ _ POST或直接$ _GET,我通常把我的表格數據一個各種各樣的 「命名空間」,即:

<input type="text" name="search[criteria1]" /> 
<input type="text" name="search[criteria2]" /> 
<input type="text" name="search[criteria3]" /> 

然後,在你的控制器:

... 
public function some_resource() 
{ 
    $this->load->model('Some_model'); 
    $search_criteria = $this->input->get_post('search'); 
    if ($search_criteria) 
    { 
     // make sure here to remove any unsupported criteria 
     // (or in the model is usually a bit more modular, but 
     // it depends on how strictly you follow MVC) 
     $results = $this->Some_model->search($search_criteria); 
    } 
    else 
    { 
     // If no search criteria were given, return unfiltered results 
     $results = $this->Some_model->get_all(); 
    } 

    $this->load->view('some_view', array(
     'results'   => $results, 
     'pagination_base' => current_url().'?'.http_build_query($search_criteria) 
    )); 
} 
... 

因爲我指定$這個 - >輸入 - >get_post(),它將首先檢查查詢字符串參數;如果它不存在,它會回落到發佈數據。這將允許您在表單中使用POST,但仍然通過帶有分頁類的查詢字符串傳遞相同的數據。但是,實際上,表單應該使用GET方法,因爲您將這些參數作爲查詢發送,而不是將某些內容發送到服務器。就這個細節而言,我只有$ 0.02。

+0

謝謝,這應該工作。請舉例說明同一個問題的CI輸入類。 –

+0

當然。看到上面的更新... – landons

+0

畢竟,沒有接受?至少扔我upvote,sheesh;) – landons

0

分頁類使用GET請求,並簡單地使用頁面的記錄偏移修改URL。例如,第2頁的每頁顯示50條記錄的列表將是/ some/url/50,第3頁將是/ some/url/100。

您可以:

  1. 更改#3與任何一個崗位工作或GET和調用,可以識別哪些記錄來選擇一個URL,或
  2. 擴展分頁類輸出形式每次更改頁面時都會從#2重新發送相同的POST數據(並且每個頁面鏈接POST a而不僅僅是一個鏈接)。

我覺得#1可能是最好的選擇。它是海基會,可以加書籤,整體來說是一個更乾淨的方式來做到這一點。

例如,您使用的形式,與平時一樣,但你也可以直接使用/一些/獨特/ URL

去的結果。然後每個分頁鏈接將調用/一些/獨特/ URL/50,其中50是記錄偏移量(分頁類使用偏移量而不是頁碼)。

0

我建議你編輯,如:

$config['base_url']=site_url('site/users_area/arg1/arg2') ; 

,然後 「$ _GET」,它形成的網址或JST使用

$val1 = $this->uri->segment(3); 
$val1 = $this->uri->segment(4); 

,改變你的uri_segment

$config['uri_segment'] = '3';to 
$config['uri_segment'] = '5'. 

Depends中關於穿過url的參數數量