使用 Codeigniter 的 Pagination 且帶入不定長度查詢參數的方法
在官方的Pagination Class 中, 用 page 的參數來控制本頁目前的起始行數。但範例裡面使用的方法如下:
$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 掉原先的目前所抓取的起始行數的方法。
$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。