Codeigniter-3.x 分頁密技(pagination)


分頁使用前言

先按此做相關設定檔調整
 

擴充設定

\application\config\config.php
在底部增加這行
// 每個頁面所需要的項目數量
$config['per_page'] = 10;

\system\libraries\Pagination.php
construct 增加 per_page
public function __construct($params = array())
{
  $this->CI =& get_instance();
  $this->CI->load->language('pagination');
  foreach (array('first_link', 'next_link', 'prev_link', 'last_link') as $key)
  {
    if (($val = $this->CI->lang->line('pagination_'.$key)) !== FALSE)
    {
        $this->$key = $val;
    }
  }
  $this->per_page = $this->CI->config->item('per_page'); //增加這行
  $this->initialize($params);
    ...
}



 

讓 CI 的換頁採用頁數而不是位移數

說明

當你使用 $this->pagination->create_links() 產生頁數時,
你會發現下一頁都會累加 10 ,而非常見的頁數 2 
原始形式
http://webgolds/news/index/20 第2頁
http://webgolds/news/index/30 第3頁
http://webgolds/news/index/40 第4頁
...

想要的下一頁形式
http://webgolds/news/index/2 第2頁
http://webgolds/news/index/3 第3頁
http://webgolds/news/index/4 第4頁
...
 

該怎麼做

How to use page numbers in Codeigniter pagination instead of offset?

方法一、
在每次使用分頁庫時,補上 $config['use_page_numbers'] = TRUE;
<?php
...
public function index()
{
$config['use_page_numbers'] = TRUE; //加上這行
$this->pagination->initialize($config); 
$data['page_link'] = $this->pagination->create_links();
...
}

方法二、
以上方式稍嫌麻煩,且可能忘記補,最後為了效能直接修改該分頁 class。
1. 找到 \system\libraries\Pagination.php

/**
 * Use page numbers flag
 *
 * Whether to use actual page numbers instead of an offset
 *
 * @var bool
 */
protected $use_page_numbers = FALSE;
修改成

protected $use_page_numbers = TRUE;

如此以後便可以直接使用常見的分頁數字,而非位移數字。

 

混合式 URI 分段和查詢字符串參數

一個例子:
http://webgolds.google.com/product/5?sort_by=price&order=ASC

方法一、
在每次使用分頁庫產生換頁語法時,補上 $config['reuse_query_string'] = TRUE;

<?php
    public function index()
    {
      $config['reuse_query_string'] = TRUE; //補上這行啟用
      $this->pagination->initialize($config); 
      $data['page_link'] = $this->pagination->create_links();

方法二、
以上方式稍嫌麻煩,且可能忘記補,最後為了效能直接修改該分頁 class。
1. 找到 \system\libraries\Pagination.php

/**
* Reuse query string flag
*
* @var bool
*/
protected $reuse_query_string = TRUE;

 

路由 routes 參考

\application\config\routes.php

...
$route['news/page/:num'] = "news/index/$1";
$route['news/page'] = "news/index";
...




 

參考資料

https://codeigniter.org.tw/user_guide/tutorial/news_section.html
https://codeigniter.com/user_guide/libraries/pagination.html#customizing-the-pagination



 

回上一頁

相關文章:

喜歡這篇文章嗎?立即分享

Posted : / Views: 280
Last updated :2017-11-07