您的位置:首页 > 编程语言 > PHP开发

PHP自动适应范围的页码分页程序

2015-10-09 11:38 579 查看
记得以前看过一个页码方式的分页效果,页码数多了折行继续显示一直到60多页,呵呵!有点影响美观!

于是写了一个,可以自动适应范围的页码分页程序

也就是说,页码格式如下

<< < 1 2 3 4 5 6 7 > >>

<< < 6 7 8 9 10 11 12 > >>

下划线为当前页,这样就可以固定显示一个相近的页码,避免太长影响美观

代码加了注释,主要是新手看看,呵呵 ,写这个函数,没有考虑表现结构分离问题,高手就不要追究了!

<?php

function page($page,$total,$phpfile,$pagesize=10,$pagelen=7){

$pagecode = '';//定义变量,存放分页生成的HTML

$page = intval($page);//避免非数字页码

$total = intval($total);//保证总记录数值类型正确

if(!$total) return array();//总记录数为零返回空数组

$pages = ceil($total/$pagesize);//计算总分页

//处理页码合法性

if($page<1) $page = 1;

if($page>$pages) $page = $pages;

//计算查询偏移量

$offset = $pagesize*($page-1);

//页码范围计算

$init = 1;//起始页码数

$max = $pages;//结束页码数

$pagelen = ($pagelen%2)?$pagelen:$pagelen+1;//页码个数

$pageoffset = ($pagelen-1)/2;//页码个数左右偏移量

//生成html

$pagecode='<div class="page">';

$pagecode.="<span>$page/$pages</span>";//第几页,共几页

//如果是第一页,则不显示第一页和上一页的连接

if($page!=1){

$pagecode.="<a href=\"{$phpfile}?page=1\"><<</a>";//第一页

$pagecode.="<a href=\"{$phpfile}?page=".($page-1)."\"><</a>";//上一页

}

//分页数大于页码个数时可以偏移

if($pages>$pagelen){

//如果当前页小于等于左偏移

if($page<=$pageoffset){

$init=1;

$max = $pagelen;

}else{//如果当前页大于左偏移

//如果当前页码右偏移超出最大分页数

if($page+$pageoffset>=$pages+1){

$init = $pages-$pagelen+1;

}else{

//左右偏移都存在时的计算

$init = $page-$pageoffset;

$max = $page+$pageoffset;

}

}

}

//生成html

for($i=$init;$i<=$max;$i++){

if($i==$page){

$pagecode.='<span>'.$i.'</span>';

} else {

$pagecode.="<a href=\"{$phpfile}?page={$i}\">$i</a>";

}

}

if($page!=$pages){

$pagecode.="<a href=\"{$phpfile}?page=".($page+1)."\">></a>";//下一页

$pagecode.="<a href=\"{$phpfile}?page={$pages}\">>></a>";//最后一页

}

$pagecode.='</div>';

return array('pagecode'=>$pagecode,'sqllimit'=>' limit '.$offset.','.$pagesize);

}

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: