PHP分页小程序

<html>        
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<?php
  /**
  * 看这个函数先,请先看看google的翻页效果,以下函数,基本实现了他的功能
  *   
 * 这是一个通用的函数,只要是分页的程序都可以利用到他,以后你可以直接套用,,
 *  参数$url:这是代表翻页程序的url,这个很重要.等下详细解析
 *  参数$totalCount:这个是代表你数据库查询记录数的总数.稍微想下.没有一个总数,如何分页.
 *  参数$pageNo:代表你传递来第几页,默认第一页
 *  参数$pageSize:这个是你每页显示多少个记录啊,这个要根据你页面的布局来设定,所以这里设置了成为参数传递进来
 
    建议:有的地方不懂,你就把那个变量 echo出来 ,比如echo ($pageCount);
 */
  function getPageInfo($url,$totalCount,$pageNo,$pageSize){
  
      $listStep=6; //这个代表多少个分页信息,你稍微想象下google的查询就可以了..中间的oo就是这个道理
      $pageInfo=""; //定义分页信息的变量,在程序下面将对它进行拼凑
      
      $pageCount  = (int) Math.ceil((double) $totalCount / $pageSize);//Math.ceil是向上取整,比如得到2.8,那么就是3,因为php是弱类型,
    																//所谓弱类型,就是隐士的数据类型,不用声明数据类型就使用,所以我们这里要强制转为int(																		//)整型类型
      $pageCount=1;
      if( $pageCount<10){   //这里是做优化处理,如果不明白正则表达式,你可以把下面的	//	echo("pageCount=".$pageCount);的注释取消看下,
	   			         //	就知道这样做的好处,因为php就算你强制转换为了int类型,比如小于10页,还是会显示类似08,07这样的格式,我们要得到的是直接一个8
     	$pageCount=preg_replace('/^0/', '', $pageCount);//这句话的意思是以0开头的整数,把0用''空串代替,这里设计正则表达式,可以参考网上资料
	//	echo("pageCount=".$pageCount);
      }
      
      if($pageCount<$pageNo){//假设记录总数小于传进来的页码,这种情况主要考虑,用户搞破坏,把传递进来的页码写的很大
          $pageNo=$pageCount;
      }
       
      if ($pageNo < 1){ //防止用户搞破坏,传递一个负数进来
         $pageNo = 1;
      }
      
     $listBegin =$pageNo -  $listStep / 2;//比如有1000条分页信息,因为我们之前规定了$listStep=6,就是每页只显示6个分页信息,注意,这里是分页信息	,
	 										//不是你在页面要显示的结果记录数,比如我们当前在50页,那么我们显示的分页信息是 48 49 50 51 52 53
											 // 这样的才叫分页信息,这样主要避免太多分页信息..这就是为什么不用一个for循环的缘故了
    
      $listEnd = $pageNo + $listStep/2;     //比如我们在50页,那么分页信息就显示到53页,和上面的注释结合起来看
     
      if($listEnd<$listStep){    //如果结束的分页信息小于我们每页要显示的分页信息,
           $listEnd=$listStep;
       }
      
      if ($listEnd > $pageCount){ //想想为什么会发生这种情况?主要是因为我们之前$listEnd = $pageNo + $listStep/2;  
                                //当传递进来的页码是1,也就是$pageNo=1,因为$listStep=6,那么$listEnd=4,刚好我们的记录数很少,1页就可以显示完了                                              //,就出现这样的情况了
           $listEnd = $pageCount + 1; //这里的加1,如果不理解,你跟下面的for循环结合起来就明白很多了
           $listBegin=$listEnd-$listStep;//重新计算下开始分页的信息.
       }
       if($listBegin < 1){ //总不能从负页数开始吧
          $listBegin = 1;
       } 
       
        $pageInfo="共<font color=red> ". $pageCount." </font>页 ";//开始拼凑分页信息
        if ($pageNo > 1){
                $pageInfo.=  "<a href='".$url ."&page=1'>首页</a> ";
               $pageInfo.=  "<a href='".$url ."&page=" .($pageNo - 1) . "'>上一页</a>";
           }else{
               $pageInfo.="首页 ";
               $pageInfo.="上一页";
        }
      
       for ( $i = $listBegin; $i < $listEnd; $i++){ //根据开始分页信息和结束分页信息,输出当前页的分页信息
       
                 if ($i != $pageNo){
                 	//特别注意这里,这里page前面直接用了&而不是?,是因为很多时候,我们还有其他要传递的参数,
                 	//比如showal.php?action=list这样,那么我们就很容易拼凑成showal.php?action=list&page=1这样的格式了,达到通用的效果
                 	//避免需要分页的页面都要分别写分页信息
                 	
                     $pageInfo.="<a href='".$url ."&page=" . $i . "'>[" . $i . "]</a>";
                 } else {
                       $pageInfo.="[<font color=red>" . $i . "</font>]";
                 }
            }
            if ($pageNo < $pageCount){
                  $pageInfo.= "<a href='". $url ."&page=" . ($pageNo + 1) . "'>下一页</a>  ";
                  $pageInfo.= "<a href='". $url ."&page=" . $pageCount ."'>末页</a>";
            }else{
               $pageInfo.="下一页";
               $pageInfo.="尾页";  
            }
        
         return $pageInfo; 
    }


?>

</body>

</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值