有了这两个参数就可以很方便的写出分页程序,我们以mysql数据库作为数据源,在mysql里如果要想取出表内某段特定内容可以使用的 t-sql语句:select * from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=$pagesize*($page-1),rows是要显示的记录条数,这里就是$page。也就是说select * from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录。
代码如下 复制代码
totalnum = $count;//总记录数
$this->pagesize = $size;//每页大小
$this->pageno = $pageno;
//计算总页数
$this->pagecount = ceil($this->totalnum/$this->pagesize);
$this->pagecount = ($this->pagecountpagecount;
//检查pageno
$this->pageno = $this->pageno == 0 ? 1 : $this->pageno;
$this->pageno = $this->pageno > $this->pagecount? $this->pagecount : $this->pageno;
//计算偏移
$this->offset = ( $this->pageno - 1 ) * $this->pagesize;
//计算是否有上一页下一页
$this->hasprepage = $this->pageno == 1 ?false:true;
$this->hasnextpage = $this->pageno >= $this->pagecount ?false:true;
$this->pagedata = $pagedata;
$this->jsfunction = $jsfunction;
}
/**
* 分页算法
* @return
*/
private function generatepagelist(){
$pagelist = array();
if($this->pagecount for($i=0;$ipagecount;$i++){
array_push($pagelist,$i+1);
}
}else{
if($this->pageno for($i=0;$i array_push($pagelist,$i+1);
}
array_push($pagelist,-1);
array_push($pagelist,$this->pagecount);
}else if($this->pageno > $this->pagecount - 4){
array_push($pagelist,1);
array_push($pagelist,-1);
for($i=5;$i>0;$i--){
array_push($pagelist,$this->pagecount - $i+1);
}
}else if($this->pageno > 4 && $this->pageno pagecount - 4){
array_push($pagelist,1);
array_push($pagelist,-1);
array_push($pagelist,$this->pageno -2);
array_push($pagelist,$this->pageno -1);
array_push($pagelist,$this->pageno);
array_push($pagelist,$this->pageno + 1);
array_push($pagelist,$this->pageno + 2);
array_push($pagelist,-1);
array_push($pagelist,$this->pagecount);
}
}
return $pagelist;
}
/***
* 创建分页控件
* @param
* @return string
*/
public function echopageasdiv(){
$pagelist = $this->generatepagelist();
$pagestring =
;
if(!empty($pagelist)){
if($this->pagecount >1){
if($this->hasprepage){
$pagestring = $pagestring .jsfunction . ( . ($this->pageno-1) . )>上一页;
}
foreach ($pagelist as $k=>$p){
if($this->pageno == $p){
$pagestring = $pagestring . . $this->pageno . ;
continue;
}
if($p == -1){
$pagestring = $pagestring ....;
continue;
}
$pagestring = $pagestring .jsfunction . ( . $p . )> . $p . ;
}
if($this->hasnextpage){
$pagestring = $pagestring .jsfunction . ( . ($this->pageno+1) . )>下一页;
}
}
}
$pagestring = $pagestring .(
);
return $pagestring;
}
}?>
css
代码如下 复制代码
-->
使用方法
代码如下 复制代码
$pageno = $_get['pageno'];
if(empty($pageno)){
$pageno = 1;
}
//分页数据
$pagedata = news::getnewspage($pageno,$pagesize);
//取得总行数
$count = news::getnewscount();
//创建分页器
$p = new pageview($count['0']['total'],$pagesize,$pageno,$pagedata);
//生成页码
$pageviewstring = $p->echopageasdiv();
下面再介绍一个分页类
代码如下 复制代码
each_disnums=intval($each_disnums);
$this->nums=intval($nums);
if(!$current_page){
$this->current_page=1;
}else{
$this->current_page=intval($current_page);
}
$this->sub_pages=intval($sub_pages);
$this->pagenums=ceil($nums/$each_disnums);
$this->subpage_link=$subpage_link;
$this->show_subpages($subpage_type);
//echo $this->pagenums.--.$this->sub_pages;
}
/*
__destruct析构函数,当类不在使用的时候调用,该函数用来释放资源。
*/
function __destruct(){
unset($each_disnums);
unset($nums);
unset($current_page);
unset($sub_pages);
unset($pagenums);
unset($page_array);
unset($subpage_link);
unset($subpage_type);
}
/*
show_subpages函数用在构造函数里面。而且用来判断显示什么样子的分页
*/
function show_subpages($subpage_type){
if($subpage_type == 1){
$this->subpagecss1();
}elseif ($subpage_type == 2){
$this->subpagecss2();
}
}
/*
用来给建立分页的数组初始化的函数。
*/
function initarray(){
for($i=0;$isub_pages;$i++){
$this->page_array[$i]=$i;
}
return $this->page_array;
}
/*
construct_num_page该函数使用来构造显示的条目
即使:[1][2][3][4][5][6][7][8][9][10]
*/
function construct_num_page(){
if($this->pagenums sub_pages){
$current_array=array();
for($i=0;$ipagenums;$i++){
$current_array[$i]=$i+1;
}
}else{
$current_array=$this->initarray();
if($this->current_page for($i=0;$i $current_array[$i]=$i+1;
}
}elseif ($this->current_page pagenums && $this->current_page > $this->pagenums - $this->sub_pages + 1 ){
for($i=0;$i $current_array[$i]=($this->pagenums)-($this->sub_pages)+1+$i;
}
}else{
for($i=0;$i $current_array[$i]=$this->current_page-2+$i;
}
}
}
return $current_array;
}
/*
构造普通模式的分页
共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
*/
function subpagecss1(){
$subpagecss1str=;
$subpagecss1str.=共.$this->nums.条记录,;
$subpagecss1str.=每页显示.$this->each_disnums.条,;
$subpagecss1str.=当前第.$this->current_page./.$this->pagenums.页 ;
if($this->current_page > 1){
$firstpageurl=$this->subpage_link.1;
$prewpageurl=$this->subpage_link.($this->current_page-1);
$subpagecss1str.=[首页] ;
$subpagecss1str.=[上一页] ;
}else {
$subpagecss1str.=[首页] ;
$subpagecss1str.=[上一页] ;
}
if($this->current_page pagenums){
$lastpageurl=$this->subpage_link.$this->pagenums;
$nextpageurl=$this->subpage_link.($this->current_page+1);
$subpagecss1str.= [下一页] ;
$subpagecss1str.=[尾页] ;
}else {
$subpagecss1str.=[下一页] ;
$subpagecss1str.=[尾页] ;
}
echo $subpagecss1str;
}
/*
构造经典模式的分页
当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
*/
function subpagecss2(){
$subpagecss2str=;
$subpagecss2str.=当前第.$this->current_page./.$this->pagenums.页 ;
if($this->current_page > 1){
$firstpageurl=$this->subpage_link.1;
$prewpageurl=$this->subpage_link.($this->current_page-1);
$subpagecss2str.=[首页] ;
$subpagecss2str.=[上一页] ;
}else {
$subpagecss2str.=[首页] ;
$subpagecss2str.=[上一页] ;
}
$a=$this->construct_num_page();
for($i=0;$i $s=$a[$i];
if($s == $this->current_page ){
$subpagecss2str.=[.$s.];
}else{
$url=$this->subpage_link.$s;
$subpagecss2str.=[.$s.];
}
}
if($this->current_page pagenums){
$lastpageurl=$this->subpage_link.$this->pagenums;
$nextpageurl=$this->subpage_link.($this->current_page+1);
$subpagecss2str.= [下一页] ;
$subpagecss2str.=[尾页] ;
}else {
$subpagecss2str.=[下一页] ;
$subpagecss2str.=[尾页] ;
}
echo $subpagecss2str;
}
}
?>
调用方法
代码如下 复制代码