设为首页 收藏本站
查看: 587|回复: 0

[经验分享] PHP分页小程序

[复制链接]

尚未签到

发表于 2017-3-27 08:28:48 | 显示全部楼层 |阅读模式
<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>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-355854-1-1.html 上篇帖子: 初学php——基础语法 下篇帖子: PHP 中使用工厂模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表