in 程式小心得

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

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

</p>
<p>$this-&gt;load-&gt;library('pagination');</p>
<p>$config['base_url'] = 'http://example.com/index.php/test/page/';<br />
$config['total_rows'] = 200;<br />
$config['per_page'] = 20;</p>
<p>$this-&gt;pagination-&gt;initialize($config);<br />

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

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

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

<br />
$this-&gt;load-&gt;library('pagination');</p>
<p>// 中間可以加很多的東西,但 page 一定要放在最後面<br />
$config['base_url'] = 'http://example.com/index.php/test/'.blalbala.'/page/';<br />
$config['total_rows'] = 200;<br />
$config['per_page'] = 20;<br />
// 新增下面的程式。<br />
$config['uri_segment'] = 0; // 不指定 row 的 url 位置<br />
$q = $this-&gt;uri-&gt;uri_to_assoc(3); // 把目前的參數轉成array<br />
$config['cur_page'] = $q['page']; // override 目前的 row</p>
<p>$this-&gt;pagination-&gt;initialize($config);</p>
<p>echo $this-&gt;pagination-&gt;create_links();

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

Write a Comment

Comment

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料