程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ecshop 中分頁的介紹

ecshop 中分頁的介紹

編輯:C++入門知識

ecshop 中分頁的介紹


分頁在一個大型系統中是必不可少的,當數據量過大時,一頁顯示的內容是有限的,這時我們就想把數據分頁展示,下面介紹下mysql下的分頁原理,以及ecshop中的分頁函數的使用。


mysql中的分頁主要是通過關鍵詞limit來實現的, limit 可以給以給起始值,然後再給一個范圍,就可以逐次地取出所有的數據。
舉個簡單的例子:


create table user(int 10 not null auto_increment,
name varchar(20),
sex tinyint(1),
reg_time datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


創建出user表,插入測試數據。
insert into user(`name`,`sex` `reg_time`) values('zhangsan','1','2012-02-09 02:00:00);
insert into user(`name`,`sex` `reg_time`) values('zaoren','1','2012-02-09 14:00:32);
insert into user(`name`,`sex` `reg_time`) values('lily','0','2013-08-10 10:06:00);
insert into user(`name`,`sex` `reg_time`) values('lizi','0','1956-00-56 10:10:50);
insert into user(`name`,`sex` `reg_time`) values('zhangsan2','1','1999-00-34 03:08:00);
insert into user(`name`,`sex` `reg_time`) values('zhangsan3','0','1998-00-24 00:23:00);
insert into user(`name`,`sex` `reg_time`) values('zhangsan4','1','2013-00-00 00:12:00);
insert into user(`name`,`sex` `reg_time`) values('qunhao','1','2014-00-00 00:00:00);
insert into user(`name`,`sex` `reg_time`) values('zhangsan4','1','2014-10-30 09:56:00);
insert into user(`name`,`sex` `reg_time`) values('zhangsan6','1','2013-06-00 05:01:00);
insert into user(`name`,`sex` `reg_time`) values('zhangsan8','1','2016-00-00 00:00:00);
insert into user(`name`,`sex` `reg_time`) values('hongyezhang','0','2015-00-00 00:00:00);
insert into user(`name`,`sex` `reg_time`) values('zhangsan','1','2008-08-080 00:00:00);


之後通過limit就可以分批取出用戶信息:
select * from `user` order by `reg_time` limit 0,5;
select * from `user` order by `reg_time` limit 5,5;
select * from `user` order by `reg_time` limit 10,5;
通過改變limit 的初始值,就可以每次取出5條數據。


下面給出ecshop中的分頁頁碼函數:


function get_pager($url, $param, $record_count, $page = 1, $size = 10)
{
$size = intval($size);
if ($size < 1)
{
$size = 10;
}


$page = intval($page);
if ($page < 1)
{
$page = 1;
}


$record_count = intval($record_count);


$page_count = $record_count > 0 ? intval(ceil($record_count / $size)) : 1;
if ($page > $page_count)
{
$page = $page_count;
}
/* 分頁樣式 */
$pager['styleid'] = isset($GLOBALS['_CFG']['page_style'])? intval($GLOBALS['_CFG']['page_style']) : 0;


$page_prev = ($page > 1) ? $page - 1 : 1;
$page_next = ($page < $page_count) ? $page + 1 : $page_count;


/* 將參數合成url字串 */
$param_url = '?';
foreach ($param AS $key => $value)
{
$param_url .= $key . '=' . $value . '&';
}


$pager['url'] = $url;
$pager['start'] = ($page -1) * $size;
$pager['page'] = $page;
$pager['size'] = $size;
$pager['record_count'] = $record_count;
$pager['page_count'] = $page_count;


if ($pager['styleid'] == 0)
{
$pager['page_first'] = $url . $param_url . 'page=1';
$pager['page_prev'] = $url . $param_url . 'page=' . $page_prev;
$pager['page_next'] = $url . $param_url . 'page=' . $page_next;
$pager['page_last'] = $url . $param_url . 'page=' . $page_count;
$pager['array'] = array();
for ($i = 1; $i <= $page_count; $i++)
{
$pager['array'][$i] = $i;
}
}
else
{
$_pagenum = 10; // 顯示的頁碼
$_offset = 2; // 當前頁偏移值
$_from = $_to = 0; // 開始頁, 結束頁
if($_pagenum > $page_count)
{
$_from = 1;
$_to = $page_count;
}
else
{
$_from = $page - $_offset;
$_to = $_from + $_pagenum - 1;
if($_from < 1)
{
$_to = $page + 1 - $_from;
$_from = 1;
if($_to - $_from < $_pagenum)
{
$_to = $_pagenum;
}
}
elseif($_to > $page_count)
{
$_from = $page_count - $_pagenum + 1;
$_to = $page_count;
}
}
$url_format = $url . $param_url . 'page=';
$pager['page_first'] = ($page - $_offset > 1 && $_pagenum < $page_count) ? $url_format . 1 : '';
$pager['page_prev'] = ($page > 1) ? $url_format . $page_prev : '';
$pager['page_next'] = ($page < $page_count) ? $url_format . $page_next : '';
$pager['page_last'] = ($_to < $page_count) ? $url_format . $page_count : '';
$pager['page_kbd'] = ($_pagenum < $page_count) ? true : false;
$pager['page_number'] = array();
for ($i=$_from;$i<=$_to;++$i)
{
$pager['page_number'][$i] = $url_format . $i;
}
}
$pager['search'] = $param;


return $pager;
}


從中我們可以看出他通過偽造url參數來傳值,比如這裡參數page當前頁面就是通過url傳參get過來的。


分頁頁碼顯示需要的幾個變量:


當前頁面變量,
數據的條數,
每頁顯示的條數,
根據上面得出的總頁數,
這樣就可以得出最大的頁碼數,就可以進行分頁碼顯示了。


給出一個url?page=2,則當前是第二頁,第二頁頁碼沒有連接,
前一頁的頁碼自然是url?page=1(-1)
下一頁的頁碼自然是url?page=3(+1)


當前頁面的內容,就可以通過


select * from table order by id limit 2*size, size,

每次通過調整limit初始值就可以達到取出表中的所有數據。


分頁的實現就是考慮2部分,一部分是數據的分頁顯示,一部分就是頁碼的顯示,上面給出的函數就是ecshop 中頁碼的顯示函數,數據的顯示通過自己的調整來實現。





  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved