|
昨天在里,和看到几位牛牛讨论关于PHP分页的算法,受益颇深,特将代码收藏,待以后使用。。
/*大概的要求就是
*提供总页数,提供当前浏览页数,提供显示页数
*浏览页数尽量在中间
*比如总页数是100页,正在浏览第34页,要求显示7页
*哪么返回结果应该是31323334353637
*/
/////////萝莉控的/////////
functionz($m,$x,$len)//M是总共多少页,X是位于中间的页,LEN是每次显示多少翻页
{//10,5,5
$start=$x-($len-1)/2;
if($start<1)
{
$start=1;
$end=$len;
if($end>$m)$end=$m;
}
else
{
$end=$start+$len-1;
if($end>$m)
{
$offset=$end-$m;
$end=$m;
$start-=$offset;
if($start<1)$start=1;
}
}
for($c=$start;$c<=$end;$c++)$str[]=(int)$c;
return$str;
}
var_dump(z(100,45,10));
//////////废墟的方法///////////
functionfucklolicon($x,$m,$len)
{
$ss=intval($len/2);
$start=$x-$ss;
$end=$x+$ss;
if($start<1)
{
$off=$start-1;
$start=1;
$end-=$off;
}
if($end>$m)
$end=$m;
if($end>$m-$ss)
{
if($end-$m<1)
$start=1;
else
$start=$end-$m;
}
for($i=$start;$i<$end+1;$i++)
{
$p[]=$i;
}
return$p;
}
再来个全的。。废墟兄给的分页类。。。
/*分页*/
functionPageQuery($table,$condition,$page=1,$url="",$PageList=10,$PageNum=7,$space=" ")
{
/*查询总的记录数*/
if($condition=="")$condition=1;
$aNum=$this->GetRows($table,$condition);
if($aNum==0){
return$p;
}
/*总页数计算*/
if($aNum%$PageList==0){
$aPage=$aNum/$PageList;
}
else{
$aPage=intval($aNum/$PageList)+1;
}
/*分页内容*/
if($page>intval($PageNum/2)+1){
$p[]="<ahref="$_SERVER[PHP_SELF]?page=1&$url">|<<</a>";
}
if($page!=1){
$page_prev=$page-1;
$p[]="<ahref="$_SERVER[PHP_SELF]?page=$page_prev&$url"><<</a>";
}
$page_start=$page-intval($PageNum/2);
$page_end=$page+intval($PageNum/2);
if($page_start<1){
$off=$page_start-1;
$page_start=1;
$page_end-=$off;
}
if($page_end>$aPage){
$page_end=$aPage;
}
if($page_end>$aPage-intval($PageNum/2)){
if($page_end-$PageNum<1){
$page_start=1;
}
else{$page_start=$page_end-$PageNum;}
}
for($i=$page_start;$i<$page_end+1;$i++){
if($page==$i){
$p[]="<fontcolor="#6600FF">$i</font>";
}else{
$p[]="<ahref="$_SERVER[PHP_SELF]?page=$i&$url">$i</a>";
}
}
if($page<$aPage){
$page_next=$page+1;
$p[]="<ahref="$_SERVER[PHP_SELF]?page=$page_next&$url">>></a>";
}
if($page<$aPage-intval($PageNum/2)){
$p[]="<ahref="$_SERVER[PHP_SELF]?page=$aPage&$url">>>|</a>";
}
$p[]="总共$aPage页$aNum条";
returnimplode($space,$p);
} |
|
|