{ pagination }

  • 使用 Codeigniter 的 Pagination 且帶入不定長度查詢參數的方法

    | /

    在官方的Pagination Class 中, 用 page 的參數來控制本頁目前的起始行數。但範例裡面使用的方法如下:

    1
    2
    3
    4
    5
    $this->load->library('pagination'); 
    $config['base_url'] = 'http://example.com/index.php/test/page/';
    $config['total_rows'] = 200;
    $config['per_page'] = 20;
    $this->pagination->initialize($config);

    所以原始的方法所產生的 url 就是 http://example.com/index.php/test/page/{row number} 這種格式。在參數是固定長度下,你可以輕易的知道在第幾個位置是分頁的依據,即可以使用 $config[‘uri_segment’] 來指定位置。

    但如果參數為不固定數量,哪怎麼辦?使用 uri_segment 就沒有作用了,因為你也不知道第幾個位置是起始行數,而且起始行數只會加在 url 的最後面。

    下面提供一個方法可以 override 掉原先的目前所抓取的起始行數的方法。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $this->load->library('pagination'); // 中間可以加很多的東西,但 page 一定要放在最後面
    $config['base_url'] = 'http://example.com/index.php/test/'.blalbala.'/page/';
    $config['total_rows'] = 200;
    $config['per_page'] = 20;
    // 新增下面的程式。
    $config['uri_segment'] = 0;
    // 不指定 row 的 url 位置
    $q = $this->uri->uri\_to\_assoc(3);
    // 把目前的參數轉成array
    $config['cur_page'] = $q['page'];
    // override 目前的 row
    $this->pagination->initialize($config);
    echo $this->pagination->create\_links();

    這樣你的參數的長度就不需要固定了。這對於帶入參數的 search ,或是 list 的頁面,在使用上較為方便,也不用作什麼 dirty hack。

    actos price