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 相关文章推荐
PHP Socket 编程
Apr 09 PHP
PHPUnit PHP测试框架安装方法
Mar 23 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
phpize的深入理解
Jun 03 PHP
linux系统下php安装mbstring扩展的二种方法
Jan 20 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
PHP将URL转换成短网址的算法分享
Sep 13 PHP
PHP截取发动短信内容的方法
Jul 04 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
解决tp5在nginx下修改配置访问的问题
Oct 16 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 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 REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
隐性调用php程序的方法
2009/03/09 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
详解php协程知识点
2018/09/21 PHP
javascript放大镜效果的简单实现
2013/12/09 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
js的for in循环和java里foreach循环的区别分析
2015/01/28 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
浅谈Express.js解析Post数据类型的正确姿势
2019/05/30 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
js String.prototype.trim字符去前后空格的扩展
2020/08/23 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
Python实现的简单排列组合算法示例
2018/07/04 Python
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
Python列表的切片实例讲解
2019/08/20 Python
一款利用纯css3实现的360度翻转按钮的实例教程
2014/11/05 HTML / CSS
C#笔试题
2015/07/14 面试题
新学期决心书
2014/03/11 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers
CSS 一行代码实现头像与国旗的融合
2021/10/24 HTML / CSS
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技