php页码形式分页函数支持静态化地址及ajax分页


Posted in PHP onMarch 28, 2014

之前每次遇到分页,总是得自己写,觉得挺繁琐的,所以本着通用的原则,写了一个分页的方法,特此记录。

目前此分页支持静态化地址分页和无链接地址时的ajax分页(但是js得自己写):

支持的静态地址如下:www.example.com/xxx-xxx-p1-xxxx-xx.html

其他形式静态化需根据自己情况进行改写

支持ajax方式分页时,$link参数为空,但提供了pid和optype,其中pid用于获取该页码页数,optype用于一个页面存在多个分页时区分当前触发动作属于哪个分页逻辑

/********************************************************** 
* 
* 获取页码 
* 
********************************************************** 
* 
* @params string $link 链接地址(链接为空时可以用ajax翻页) 
* 
* @params int $intPage 当前页数 
* 
* @params int $intTotal 总页数 
* 
* @params int $intSize 要显示的页数个数 
* 
* @params string $type 链接种类(多个翻页用于区分翻页区域) 
* 
********************************************************** 
* 
* @return array 
*/ 
private function formatPage($link="",$intPage,$intTotal,$intSize=3,$type="") 
{ 
$strPage = '<div class="g_serpage clearfix">'; 
if($intTotal > 0) 
{ 
if($intPage > 1) 
$strPage .= $link!=''?'<a href="'.preg_replace("/-p(\d+)/","p".($intPage-1),$link).'"><<上一页</a>':'<a optype="'.$type.'" pid="showpage_'.($intPage-1).'" href="javascript:void(0)"><<上一页</a>'; 
else 
$strPage .= '<a href="javascript:void(0)"><<上一页</a>'; 
//窗口宽度大于等于总页数 
if( ($intSize+2) >= $intTotal ) 
{ 
for($i=1;$i<=$intTotal;$i++) 
{ 
$strClass = $i == $intPage ? 'class="g_serpagcur"' : ""; 
$strPage .= $link!=''?'<a href="'.preg_replace("/-p(\d+)/","p".$i,$link).'" '.$strClass.'>'.$i.'</a>':'<a optype="'.$type.'" pid="showpage_'.$i.'" href="javascript:void(0)" '.$strClass.'>'.$i.'</a>'; 
} 
} 
else 
{ 
if($intPage < ceil($intSize/2)) 
{ 
for($i=1;$i<=$intSize;$i++) 
{ 
$strClass = $i == $intPage ? 'class="g_serpagcur"' : ""; 
$strPage .= $link!=''?'<a href="'.preg_replace("/-p(\d+)/","p".$i,$link).'" '.$strClass.'>'.$i.'</a>':'<a optype="'.$type.'" pid="showpage_'.$i.'" href="javascript:void(0)" '.$strClass.'>'.$i.'</a>'; 
} 
$strPage .= $link!=''?'<a class="gpage_nobor" >…</a><a href="'.preg_replace("/-p(\d+)/","p".$intTotal,$link).'" >'.$intTotal.'</a>':'<a class="gpage_nobor" >…</a><a optype="'.$type.'" pid="showpage_'.$intTotal.'" href="javascript:void(0)" >'.$intTotal.'</a>'; 
} 
elseif(($intTotal-$intPage) < ceil($intSize/2)) 
{ 
$strPage .= $link!=''?'<a href="'.preg_replace("/-p(\d+)/","p1",$link).'">1</a><a class="gpage_nobor" >…</a>':'<a optype="'.$type.'" pid="showpage_1" href="javascript:void(0)">1</a><a class="gpage_nobor" >…</a>'; 
for($i = ($intTotal + 1 - $intSize);$i++;$i<=$intTotal) 
{ 
$strClass = $i == $intPage ? 'class="g_serpagcur"' : ""; 
$strPage .= $link!=''?'<a href="'.preg_replace("/-p(\d+)/","p".$i,$link).'" '.$strClass.'>'.$i.'</a>':'<a optype="'.$type.'" pid="showpage_'.$i.'" href="javascript:void(0)" '.$strClass.'>'.$i.'</a>'; 
} 
} 
else 
{ 
$intOffset = floor($intSize/2); 
$strPage .= $link!=''?'<a href="'.preg_replace("/-p(\d+)/","p1",$link).'">1</a>':'<a optype="'.$type.'" pid="showpage_1" href="javascript:void(0)">1</a>'; 
if( ($intPage - $intOffset) > 2) 
{ 
$strPage .= '<a class="gpage_nobor" >…</a>'; 
} 
for($i=(($intPage - $intOffset)<=1?2:($intPage - $intOffset));$i<=(($intPage + $intOffset)>=$intTotal?($intTotal-1):($intPage + $intOffset));$i++) 
{ 
$strClass = $i == $intPage ? 'class="g_serpagcur"' : ""; 
$strPage .= $link!=''?'<a href="'.preg_replace("/-p(\d+)/","p".$i,$link).'" '.$strClass.'>'.$i.'</a>':'<a optype="'.$type.'" pid="showpage_'.$i.'" href="javascript:void(0)" '.$strClass.'>'.$i.'</a>'; 
} 
if( ($intPage - $intOffset) < ($intTotal - 1)) 
{ 
$strPage .= '<a class="gpage_nobor" >…</a>'; 
} 
$strPage .= $link!=''?'<a href="'.preg_replace("/-p(\d+)/","p".$intTotal,$link).'">'.$intTotal.'</a>':'<a optype="'.$type.'" pid="showpage_'.$intTotal.'" href="javascript:void(0)">'.$intTotal.'</a>'; 
} 
} 
if($intPage < $intTotal) 
{ 
$strPage .= $link!=''?'<a href="'.preg_replace("/-p(\d+)/","p".($intPage+1),$link).'">下一页>></a>':'<a optype="'.$type.'" pid="showpage_'.($intPage+1).'" href="javascript:void(0)">下一页>></a>'; 
} 
else 
{ 
$strPage .= '<a href="javascript:void(0)">下一页>></a>'; 
} 
} 
$strPage .= "</div>"; 
return $strPage; 
}
PHP 相关文章推荐
自己动手做一个SQL解释器
Oct 09 PHP
PHP模拟SQL Server的两个日期处理函数
Oct 09 PHP
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
php生成随机密码的三种方法小结
Sep 04 PHP
PHP 第二节 数据类型之数组
Apr 28 PHP
解析PHP中一些可能会被忽略的问题
Jun 21 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
Mar 08 PHP
PHP动态柱状图实现方法
Mar 30 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
Oct 19 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
Jan 02 PHP
小谈php正则提取图片地址
Mar 27 #PHP
php顺序查找和二分查找示例
Mar 27 #PHP
php求两个目录的相对路径示例(php获取相对路径)
Mar 27 #PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 #PHP
php去除换行(回车换行)的三种方法
Mar 26 #PHP
php的memcache类分享(memcache队列)
Mar 26 #PHP
codeigniter自带数据库类使用方法说明
Mar 25 #PHP
You might like
PHP排序算法类实例
2015/06/17 PHP
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
概述BootStrap中role=&quot;form&quot;及role作用角色
2016/12/08 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
vue.js的安装方法
2017/05/12 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
在Python程序中操作MySQL的基本方法
2015/07/29 Python
python处理html转义字符的方法详解
2016/07/01 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
python之消除前缀重命名的方法
2018/10/21 Python
详解Python with/as使用说明
2018/12/13 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
深入了解NumPy 高级索引
2020/07/24 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
java程序员面试交流
2012/11/29 面试题
霸气押韵的班级口号
2014/06/09 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
端午节寄语2015
2015/03/23 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
户外拓展训练感想
2015/08/07 职场文书