PHP分页类库
<?php
/**
* @title: Ekcms page分页类库
* @version: 1.0
* @author: perry <perry@1kyou.com>
* @published: 2013-10-2
*/ class pages {
private $num; //总条数
private $perpage = 20; //每页显示条数
private $urlrule0; //url规则,默认的动态访问方式
private $urlrule; //url规则
private $page = 1; //当前页码
private $pages; //总页数
private $anotherPage; //在默认分页后面添加是显示下拉分页还是显示输入跳转框
private $currentNum; //当前显示第几条到第几条记录,如:1-20
private $strcount; //分页前统计,如: 总计:47条 每页显示11条
private $strbefore; //分页代码父节点样式开始
private $strafter; //分页代码父节点样式结束
private $isStatic; //是否为静态分页
private $indexname; //静态分页第一页文件名 function __construct($num,$perpage,$pagevar,$page,$urlrule ='',$mkdir=''){
$url = 'http://'.$_SERVER ["HTTP_HOST"].$_SERVER ["PHP_SELF"];
$aqs = $_SERVER ["QUERY_STRING"]; //网址查询参数 $this->num = $num;
$this->perpage = $perpage;
$this->page = $page;
$this->pages = ceil ( $num / $perpage );
$iCount = ($page * $perpage) > $num ? $num : $page * $perpage;
$this->currentNum = ($page - 1) * $perpage + 1 . '-' . $iCount;
$this->strcount = "<label>总计:{$this->num}条 每页{$this->perpage}条</label>";
$this->strcount_en = "<div class=\"pages\"><span class=\"pagecount\">Count:{$this->page}/{$this->num}";
$this->strbefore = ' ';
$this->strafter = '';
$this->urlrule0 = !empty ( $aqs ) ? (preg_match ( '/' . $pagevar . '=/i', $aqs ) ? $url . '?' . preg_replace ( '/' . $pagevar . '=(\d+)/i', "$pagevar=", $aqs ) : $url . '?' . $aqs . '&' . $pagevar . '=') : $url . '?' . $pagevar . '='; if (! empty ( $urlrule ) && preg_match ( '/(.*?)\/catid=(.*)\/(\d+).(.*)/i', $urlrule )){//静态分页样式
$this->isStatic = true;
$this->urlrule = preg_replace ( '/(.*?)\/catid=(.*)\/(\d+).(.*)/i', "$1/lists-$2-%d.$4", $urlrule );
$this->indexname = preg_replace ( '/(.*?)\/catid=(.*)\/(\d+).(.*)/i', "\$1/lists-\$2-1.$4", $urlrule );
global $isMakeHtml, $mkdir;
if ($isMakeHtml){
$pageto = $page + 1;
if ($pageto <= $this->pages){
makelist ( $this->urlrule0 . $pageto, sprintf ( $this->urlrule, $pageto ), $mkdir );
}
}
}else{
$this->urlrule = $this->urlrule0;
}
} //生成分页链接URL
private function setUrl($cur_page) {
$cur_page = $cur_page == 0 ? 1 : ($cur_page >= $this->pages ? $this->pages : $cur_page);
$pageHref = '';
if ($this->isStatic) {
if ($cur_page == 1)
$pageHref = $this->indexname;
else
$pageHref = sprintf ( $this->urlrule, $cur_page );
} else
$pageHref = $this->urlrule . $cur_page;
return $pageHref;
} //生成分页样式 显示模式
public function show($mode = 1) {
$showmode = 'show_mode' . $mode; if (method_exists ( $this, $showmode ))
return $this->$showmode ();
else
return $this->show_mode1 ();
} //有首页上一页下一页尾页的显示模式
private function show_mode1() {
if ($this->num > $this->perpage) {
switch ($this->page) {
case 1 :
$firstpage = '首页';
$prepage = '上一页';
$nextpage = '<a href="' . $this->setUrl ( $this->page + 1 ) . '">下一页</a>';
$lastpage = '<a href="' . $this->setUrl ( $this->pages ) . '">尾页</a>';
break;
case $this->pages :
$firstpage = '<a href="' . $this->setUrl ( 1 ) . '">首页</a>';
$prepage = '<a href="' . $this->setUrl ( $this->page - 1 ) . '">上一页</a>';
$nextpage = '下一页';
$lastpage = '尾页';
break;
default :
$firstpage = '<a href="' . $this->setUrl ( 1 ) . '">首页</a>';
$prepage = '<a href="' . $this->setUrl ( $this->page - 1 ) . '">上一页</a>';
$nextpage = '<a href="' . $this->setUrl ( $this->page + 1 ) . '">下一页</a>';
$lastpage = '<a href="' . $this->setUrl ( $this->pages ) . '">尾页</a>';
break;
}
$content = $this->strcount . $this->strbefore . " $firstpage $prepage $nextpage $lastpage " . $this->anotherPage . " " . $this->strafter;
} else {
$content="{$this->strcount} {$this->strbefore} 首页 上一页 下一页 尾页 {$this->strafter}";
}
return $content;
} //有首页上一页下一页尾页数字的显示模式
private function show_mode2() { if ($this->num > $this->perpage) { switch ($this->page) {
case 1 :
$firstpage = '<label>首页</label>';
$prepage = '<label>上一页</label>';
$nextpage = '<a href="' . $this->setUrl ( $this->page + 1 ) . '">下一页</a>';
$lastpage = '<a href="' . $this->setUrl ( $this->pages ) . '">尾页</a>';
break;
case $this->pages :
$firstpage = '<a href="' . $this->setUrl ( 1 ) . '">首页</a>';
$prepage = '<a href="' . $this->setUrl ( $this->page - 1 ) . '">上一页</a>';
$nextpage = '<label>下一页</label>';
$lastpage = '<label>尾页</label>';
break; default :
$firstpage = '<a href="' . $this->setUrl ( 1 ) . '">首页</a>';
$prepage = '<a href="' . $this->setUrl ( $this->page - 1 ) . '">上一页</a>';
$nextpage = '<a href="' . $this->setUrl ( $this->page + 1 ) . '">下一页</a>';
$lastpage = '<a href="' . $this->setUrl ( $this->pages ) . '">尾页</a>';
break;
}
$pagebar = '';
$init = 1;
$page_len = 10; //这里是设置显示多少个数字分页的数字
$max_p = $this->pages;
$pages = $this->pages; $page_len = $page_len % 2 == 0 ? $page_len : $page_len + 1; //页码个数 $pageoffset = $page_len % 2 == 0 ? $page_len / 2 : ($page_len - 1) / 2; //页码个数左右偏移量
$pageoffset_l = $page_len % 2 == 0 ? $pageoffset - 1 : $pageoffset;
$pageoffset_r = $pageoffset;
$page = $this->page; if ($pages > $page_len) {
//如果当前页小于等于左偏移
if ($page <= $pageoffset) {
$init = 1;
$max_p = $page_len;
} else { //如果当前页大于左偏移
//如果当前页码右偏移超出最大分页数
if ($page + $pageoffset_r >= $pages + 1) {
$init = $pages + 1 - 10;
} else {
//左右偏移都存在时的计算
$init = $page - $pageoffset_l;
$max_p = $page + $pageoffset_r;
}
}
}
for($i = $init; $i <= $max_p; $i ++) {
$pageStyle = $i == $this->page ? "class=\"current\"" : '';
if (empty ( $pageStyle ))
$pagebar .= "<a href=\"" . $this->setUrl ( $i ) . "\" $pageStyle>$i</a> ";
else
$pagebar .= "<span $pageStyle><u>$i</u></span> ";
} $content = $this->strcount . $this->strbefore . " $firstpage $prepage $pagebar $nextpage $lastpage " . $this->anotherPage . " " . $this->strafter;
} else {
$content="{$this->strcount} {$this->strbefore} <label>首页</label> <label>上一页</label> <label>下一页</label> <label>尾页</label> {$this->strafter}";
}
return $content;
} //有Home Previous Next End数字的显示模式
private function show_mode3() { if ($this->num > $this->perpage) { switch ($this->page) {
case 1 :
$firstpage = 'Home';
$prepage = 'Previous';
$nextpage = '<a href="' . $this->setUrl ( $this->page + 1 ) . '">Next</a>';
$lastpage = '<a href="' . $this->setUrl ( $this->pages ) . '">End</a>';
break;
case $this->pages :
$firstpage = '<a href="' . $this->setUrl ( 1 ) . '">Home</a>';
$prepage = '<a href="' . $this->setUrl ( $this->page - 1 ) . '">Previous</a>';
$nextpage = 'Next';
$lastpage = 'End';
break; default :
$firstpage = '<a href="' . $this->setUrl ( 1 ) . '">Home</a>';
$prepage = '<a href="' . $this->setUrl ( $this->page - 1 ) . '">Previous</a>';
$nextpage = '<a href="' . $this->setUrl ( $this->page + 1 ) . '">Next</a>';
$lastpage = '<a href="' . $this->setUrl ( $this->pages ) . '">End</a>';
break;
}
$pagebar = '';
$init = 1;
$page_len = 10; //这里是设置显示多少个数字分页的数字
$max_p = $this->pages;
$pages = $this->pages; $page_len = $page_len % 2 == 0 ? $page_len : $page_len + 1; //页码个数 $pageoffset = $page_len % 2 == 0 ? $page_len / 2 : ($page_len - 1) / 2; //页码个数左右偏移量
$pageoffset_l = $page_len % 2 == 0 ? $pageoffset - 1 : $pageoffset;
$pageoffset_r = $pageoffset;
$page = $this->page; if ($pages > $page_len) {
//如果当前页小于等于左偏移
if ($page <= $pageoffset) {
$init = 1;
$max_p = $page_len;
} else { //如果当前页大于左偏移
//如果当前页码右偏移超出最大分页数
if ($page + $pageoffset_r >= $pages + 1) {
$init = $pages + 1 - 10;
} else {
//左右偏移都存在时的计算
$init = $page - $pageoffset_l;
$max_p = $page + $pageoffset_r;
}
}
}
for($i = $init; $i <= $max_p; $i ++) {
$pageStyle = $i == $this->page ? "class=\"current\"" : '';
if (empty ( $pageStyle ))
$pagebar .= "<a href=\"" . $this->setUrl ( $i ) . "\" $pageStyle>$i</a> ";
else
$pagebar .= "<span $pageStyle><u>$i</u></span> ";
} $content = $this->strcount_en . $this->strbefore . " $firstpage $prepage $pagebar $nextpage $lastpage " . $this->anotherPage . " " . $this->strafter;
} else {
$content="{$this->strcount_en} {$this->strbefore} Home Previous Next End {$this->strafter}";
}
return $content;
}
}
?>
PHP分页类库的更多相关文章
- Ci 自己的分页类【原创】
这里是自己手写的一个CI分页类的实现 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /** ...
- Ci 分页类的所有属性总结
//#######################自定义分页 $config['uri_segment'] = 3;//分页方法自动测定你 URI 的哪个部分包含页数 $config['num_lin ...
- Smarty的分页实现
Smarty中的分页有很多方法.1.使用Smarty的分页插件,如Pager,pagnition,sliding_page等,不过感觉都不是太好,几乎都有一些Bug.有兴趣试用和自己去改进的朋友可以看 ...
- CI 学习笔记、记录
[ci框架]ci框架目录结构分析 分类: [CodeIgniter深入研究]2013-05-09 00:24 7420人阅读 评论(5) 收藏 举报 [php] view plaincopy mysh ...
- **【ci框架】精通CodeIgniter框架
http://blog.csdn.net/yanhui_wei/article/details/25803945 一.大纲 1.codeigniter框架的授课内容安排 2.codeigniter框架 ...
- CI框架大纲总结
一.大纲 1.codeigniter框架的授课内容安排 2.codeigniter框架的简介 |-----关于框架的概念 |-----使用CI框架的好处 |-----为什么选择CI框架 3.codei ...
- Ajax 实现无刷新页面
注意:如本文所用,在前面的文章库的数目可以在源代码中找到,我将指示在文本,其中链路,为了缩短制品的长度,阅读由此带来的不便.乞求被原谅. 评论文章 Ajax 实现无刷新页面.其原理.代码库.代码. 这 ...
- CodeIgniter 目录结构详解
1. myshop 2. |-----system 框架程序目录 3. |-----core 框架的核心程序 4. |-----CodeIgniter.php 引导性文件 5. |-----Commo ...
- ci框架(一)
ci目录结构 |-----syst ...
随机推荐
- git学习笔记04-将本地仓库添加到GitHub远程仓库-git比svn先进的地方
第1步:创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步. 如果没有,打开Shel ...
- MongoDB 中遇到的一些错误
1.在win平台上,使用ctrl+c关闭mongodb后,使用 mongod --dbpath=D:\mongodb\db --logpath=D:\mongodb\log.txt --port -- ...
- ubuntu的dns设置
ubuntu的dns设置为: dns-nameservers 8.8.8.8 注意不要少s
- iOS - UINavigationController
前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UINavigationController : UIViewController @available(iOS 2 ...
- 机器学习十大算法之KNN(K最近邻,k-NearestNeighbor)算法
机器学习十大算法之KNN算法 前段时间一直在搞tkinter,机器学习荒废了一阵子.如今想重新写一个,发现遇到不少问题,不过最终还是解决了.希望与大家共同进步. 闲话少说,进入正题. KNN算法也称最 ...
- [转载] 每个 Python 程序员都要知道的日志实践
原文: http://python.jobbole.com/81666/ 在现实生活中,记录日志非常重要.银行转账时会有转账记录:飞机飞行过程中,会有黑盒子(飞行数据记录器)记录飞行过程中的一切.如果 ...
- GFS Google File System(中文翻译)
Google文件系统 GFS是一个可扩展的分布式文件系统,用于大型的.分布式的.对大量数据进行访问的应用.它运行于廉价的普通硬件上,但可以提供容错功能.它可以给大量的用户提供总体性能较高的服务. 1. ...
- maven项目搭建
一.Maven简介 Maven是基于Java平台的项目构建(mvn clean install).依赖管理(中央仓库,Nexus)和项目信息管理的项目管理工具. Maven是基于项目对象模型(POM) ...
- [转]c++面向对象基础
from: here 1. C++面向对象程序设计的重要概念 早期革命影片里有这样一个角色,他说:“我是党代表,我代表党,我就是党.”后来他给同志们带来了灾难. 会用C++的程序员一定懂得面向对象程序 ...
- Intent 隐式跳转,向下一个活动传递数据,向上一个活动返回数据。
一.每个Intent只能指定一个action,多个Category. 使用隐式跳转,我们不仅可以跳转到自己程序内的活动,还可以启动其他程序的活动.使得Android多个程序之间的功能共享成为可能. 例 ...