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 相关文章推荐
mysql 中InnoDB和MyISAM的区别分析小结
Apr 15 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
PHP的变量总结 新手推荐
Apr 18 PHP
成为好程序员必须避免的5个坏习惯
Jul 04 PHP
微信公众平台开发实现2048游戏的方法
Apr 15 PHP
PHP中SQL查询语句的id=%d解释(推荐)
Dec 10 PHP
详谈phpAdmin修改密码后拒绝访问的问题
Apr 03 PHP
PHP基于递归实现的约瑟夫环算法示例
Aug 27 PHP
简单实用的PHP文本缓存类实例
Mar 22 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
Apr 23 PHP
PHP实现简单用户登录界面
Oct 23 PHP
PHP单元测试配置与使用方法详解
Dec 27 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获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
php 网上商城促销设计实例代码
2012/02/17 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
ThinkPHP视图查询详解
2014/06/30 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
python常用函数详解
2016/09/13 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
2019/02/14 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
Python中SQLite如何使用
2020/05/27 Python
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
Joules美国官网:出色的英国风格
2017/10/30 全球购物
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
Servlet如何得到服务器的信息
2015/12/22 面试题
物流管理专业应届生求职信
2013/11/21 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
音乐教师个人总结
2015/02/06 职场文书
给女朋友的道歉短信
2015/05/12 职场文书