【 tulaoshi.com - PHP 】
                             
                            效果图:
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/php/)
记得以前看到过一个页码方式的分页效果,页码数多了折行继续显示一直到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); 
} 
?            
函数参数: 
$page 当前$_GET获得的页码 
$total 总记录数 
$phpfile 页码连接文件名 
$pagesize 不用解释了吧 呵呵 
$pagelen 最多显示几个页码 注意(奇数),对称嘛! 
函数返回一个数组: 
pagecode 索引对应的内容是 生成的HTML 代码 
sqllimit 索引对应的是sql limit 后缀 
使用方法:
                        <?php 
$phpfile = 'index.php'; 
$page= isset($_GET['page'])?$_GET['page']:1; 
$db = new Mysql(); 
$counts = $db-counts('select `id` from `test`'); 
$sql='select `id`,`title` from `test`'; 
$getpageinfo = page($page,$counts,$phpfile); 
$sql.=$getpageinfo['sqllimit']; 
$data = $db-getRows($sql); 
? 
<?php 
echo $getpageinfo['pagecode'];//显示分页的html代码 
?            
css
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/php/)                        <style type="text/css" 
body{font-family:Tahoma;} 
.page{padding:2px;font-weight:bolder;font-size:12px;} 
.page a{border:1px solid #ccc;padding:0 5px 0 5px;margin:2px;text-decoration:none;color:#333;} 
.page span{padding:0 5px 0 5px;margin:2px;background:#09f;color:#fff;border:1px solid #09c;} 
</style            
[next]
完善:加了页码跳转文本框
                        <?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.="<input type="text" size="3" onkeydown="if(event.keyCode==13) {window.location.href='{$phpfile}?page='+this.value; return false;}" /</div"; 
return array('pagecode'=$pagecode,'sqllimit'=' limit '.$offset.','.$pagesize); 
} 
?            
以下是新手使用说明
                        <?php 
$phpfile = 'index.php';//页面文件名 
$page= isset($_GET['page'])?$_GET['page']:1;//默认页码 
$db = mysql_connect('localhost','test','test');//链接数据库 
mysql_select_db('test',$db);//选择数据库 
$counts = mysql_num_rows(mysql_query('select `id` from `test`',$db));//获取需要的数据总条数 
$sql='select `id`,`title` from `test`';//定义查询语句SQL 
$getpageinfo = page($page,$counts,$phpfile);//调用函数,生成分页HTML 和 SQL LIMIT 子句 
$sql.=$getpageinfo['sqllimit'];//组合完整的SQL语句 
$data = $row = array();//初始化数组 
$result = mysql_query($sql,$db);//获取结果集 
//将数据装入$data数组 
while($row = mysql_fetch_array($result)){ 
$data[]=$row; 
} 
? 
<?php 
echo $getpageinfo['pagecode'];//显示分页的html代码 
?