PHP 设置分页 可以直接引用 最下面有自己引用的方法和注释
1 <?php
2 /**
3 file: page.class.php
4 完美分页类 Page
5 */
6 class Page {
7 private $total; //数据表中总记录数
8 private $listRows; //每页显示行数
9 private $limit; //SQL语句使用limit从句,限制获取记录个数
10 private $uri; //自动获取url的请求地址
11 private $pageNum; //总页数
12 private $page; //当前页
13 private $config = array(
14 'head' => "条记录",
15 'prev' => "上一页",
16 'next' => "下一页",
17 'first'=> "首页",
18 'last' => "末页"
19 );
20 //在分页信息中显示内容,可以自己通过set()方法设置
21 private $listNum = 10; //默认分页列表显示的个数
22
23 /**
24 构造方法,可以设置分页类的属性
25 @param int $total 计算分页的总记录数
26 @param int $listRows 可选的,设置每页需要显示的记录数,默认为25条
27 @param mixed $query 可选的,为向目标页面传递参数,可以是数组,也可以是查询字符串格式
28 @param bool $ord 可选的,默认值为true, 页面从第一页开始显示,false则为最后一页
29 */
30 public function __construct($total, $listRows=25, $query="", $ord=true){
31 $this->total = $total;
32 $this->listRows = $listRows;
33 $this->uri = $this->getUri($query);
34 $this->pageNum = ceil($this->total / $this->listRows);
35 /*以下判断用来设置当前面*/
36 if(!empty($_GET["page"])) {
37 $page = $_GET["page"];
38 }else{
39 if($ord)
40 $page = 1;
41 else
42 $page = $this->pageNum;
43 }
44
45 if($total > 0) {
46 if(preg_match('/\D/', $page) ){
47 $this->page = 1;
48 }else{
49 $this->page = $page;
50 }
51 }else{
52 $this->page = 0;
53 }
54
55 $this->limit = "LIMIT ".$this->setLimit();
56 }
57
58 /**
59 用于设置显示分页的信息,可以进行连贯操作
60 @param string $param 是成员属性数组config的下标
61 @param string $value 用于设置config下标对应的元素值
62 @return object 返回本对象自己$this, 用于连惯操作
63 */
64 function set($param, $value){
65 if(array_key_exists($param, $this->config)){
66 $this->config[$param] = $value;
67 }
68 return $this;
69 }
70
71 /* 不是直接去调用,通过该方法,可以使用在对象外部直接获取私有成员属性limit和page的值 */
72 function __get($args){
73 if($args == "limit" || $args == "page")
74 return $this->$args;
75 else
76 return null;
77 }
78
79 /**
80 按指定的格式输出分页
81 @param int 0-7的数字分别作为参数,用于自定义输出分页结构和调整结构的顺序,默认输出全部结构
82 @return string 分页信息内容
83 */
84 function fpage(){
85 $arr = func_get_args();
86
87 $html[0] = "<span class='p1'> 共<b> {$this->total} </b>{$this->config["head"]} </span>";
88 $html[1] = " 本页 <b>".$this->disnum()."</b> 条 ";
89 $html[2] = " 本页从 <b>{$this->start()}-{$this->end()}</b> 条 ";
90 $html[3] = " <b>{$this->page}/{$this->pageNum}</b>页 ";
91 $html[4] = $this->firstprev();
92 $html[5] = $this->pageList();
93 $html[6] = $this->nextlast();
94 $html[7] = $this->goPage();
95
96 $fpage = '<div style="font:12px \'\5B8B\4F53\',san-serif;">';
97 if(count($arr) < 1)
98 $arr = array(0, 1,2,3,4,5,6,7);
99
100 for($i = 0; $i < count($arr); $i++)
101 $fpage .= $html[$arr[$i]];
102
103 $fpage .= '</div>';
104 return $fpage;
105 }
106
107 /* 在对象内部使用的私有方法,*/
108 private function setLimit(){
109 if($this->page > 0)
110 return ($this->page-1)*$this->listRows.", {$this->listRows}";
111 else
112 return 0;
113 }
114
115 /* 在对象内部使用的私有方法,用于自动获取访问的当前URL */
116 private function getUri($query){
117 $request_uri = $_SERVER["REQUEST_URI"];
118 $url = strstr($request_uri,'?') ? $request_uri : $request_uri.'?';
119
120 if(is_array($query))
121 $url .= http_build_query($query);
122 else if($query != "")
123 $url .= "&".trim($query, "?&");
124
125 $arr = parse_url($url);
126
127 if(isset($arr["query"])){
128 parse_str($arr["query"], $arrs);
129 unset($arrs["page"]);
130 $url = $arr["path"].'?'.http_build_query($arrs);
131 }
132
133 if(strstr($url, '?')) {
134 if(substr($url, -1)!='?')
135 $url = $url.'&';
136 }else{
137 $url = $url.'?';
138 }
139
140 return $url;
141 }
142
143 /* 在对象内部使用的私有方法,用于获取当前页开始的记录数 */
144 private function start(){
145 if($this->total == 0)
146 return 0;
147 else
148 return ($this->page-1) * $this->listRows+1;
149 }
150
151 /* 在对象内部使用的私有方法,用于获取当前页结束的记录数 */
152 private function end(){
153 return min($this->page * $this->listRows, $this->total);
154 }
155
156 /* 在对象内部使用的私有方法,用于获取上一页和首页的操作信息 */
157 private function firstprev(){
158 if($this->page > 1) {
159 $str = " <a href='{$this->uri}page=1'>{$this->config["first"]}</a> ";
160 $str .= "<a href='{$this->uri}page=".($this->page-1)."'>{$this->config["prev"]}</a> ";
161 return $str;
162 }
163
164 }
165
166 /* 在对象内部使用的私有方法,用于获取页数列表信息 */
167 private function pageList(){
168 $linkPage = " <b>";
169
170 $inum = floor($this->listNum/2);
171 /*当前页前面的列表 */
172 for($i = $inum; $i >= 1; $i--){
173 $page = $this->page-$i;
174
175 if($page >= 1)
176 $linkPage .= "<a href='{$this->uri}page={$page}'>{$page}</a> ";
177 }
178 /*当前页的信息 */
179 if($this->pageNum > 1)
180 $linkPage .= "<span style='padding:1px 2px;background:#BBB;color:white'>{$this->page}</span> ";
181
182 /*当前页后面的列表 */
183 for($i=1; $i <= $inum; $i++){
184 $page = $this->page+$i;
185 if($page <= $this->pageNum)
186 $linkPage .= "<a href='{$this->uri}page={$page}'>{$page}</a> ";
187 else
188 break;
189 }
190 $linkPage .= '</b>';
191 return $linkPage;
192 }
193
194 /* 在对象内部使用的私有方法,获取下一页和尾页的操作信息 */
195 private function nextlast(){
196 if($this->page != $this->pageNum) {
197 $str = " <a href='{$this->uri}page=".($this->page+1)."'>{$this->config["next"]}</a> ";
198 $str .= " <a href='{$this->uri}page=".($this->pageNum)."'>{$this->config["last"]}</a> ";
199 return $str;
200 }
201 }
202
203 /* 在对象内部使用的私有方法,用于显示和处理表单跳转页面 */
204 private function goPage(){
205 if($this->pageNum > 1) {
206 return ' <input style="width:20px;height:17px !important;height:18px;border:1px solid #CCCCCC;" type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;location=\''.$this->uri.'page=\'+page+\'\'}" value="'.$this->page.'"><input style="cursor:pointer;width:25px;height:18px;border:1px solid #CCCCCC;" type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=\''.$this->uri.'page=\'+page+\'\'"> ';
207 }
208 }
209
210 /* 在对象内部使用的私有方法,用于获取本页显示的记录条数 */
211 private function disnum(){
212 if($this->total > 0){
213 return $this->end()-$this->start()+1;
214 }else{
215 return 0;
216 }
217 }
218 }
219
220
221
222
自己引用的方法和自己理解的注释,有搜到的朋友希望对你有所帮助
class DBDA //PHP链接MySQL先定义一个类
{
//分装下面这四个类名字可以随便取
public $host="localhost"; //pudlic 公众的,给IP地址一个接受的名 $host
public $uid="root"; //mysql软件名,给软件名一个接受的名 $uid
public $pwd="123"; //mysql软件密码,给密码一个接受的名 $pwd
public $dbname="mydb"; //要连的数据库名 include("page.class.php"); //引入page.class.php这个网页代码 $sz = "select count(*) from chinastates"; //求总条数
$zts = $db->StrQuery($sz); //造分页类对象 每页显示20条数据
$page = new Page($zts,20); include("page.class.php");
$page = new Page(数据总条数,每页显示几条); $sql = "select * from chinastates ".$page->limit; //讲这两个关键字拼接在后面就能实现分页!! $attr = $db->Query($sql); //<table></table>输出表单型,
echo "<table width='100%' border='1' cellpadding='0' cellspacing='0'>"; foreach($attr as $v) //循环输出每一行
{
echo "<tr><td>{$v[0]}</td><td>{$v[1]}</td><td>{$v[2]}</td></tr>";
} echo "</table>"; //输出表单型 echo $page->fpage(); //基本上就是显示出下面这样:
//共100条记录 本页10条 本页从 25—35 条 首页 上一页 1 2 3 4 5 6 7 8 9 10 下一页 末页 跳转到【】(页)GO ?> } // 结束的花括号 class DBDA //PHP链接MySQL先定义一个类
</body>
</html>
PHP 设置分页 可以直接引用 最下面有自己引用的方法和注释的更多相关文章
- PHP封装类 【 设置分页 】 !!! 可以直接引用 !!! 都有自己理解的注释,挺详细的,有搜到的朋友可以能帮到你们 【 新手一看练两遍就懂 】
在网页要显示出的内容,就是客户能看到的东西 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...
- NPOI导出EXCEL 打印设置分页及打印标题
在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方法,但一直都没有起到作用.经过研究是要设置 sheet1.FitToPage = false; 而 ...
- [转]NPOI导出EXCEL 打印设置分页及打印标题
本文转自:http://www.cnblogs.com/Gyoung/p/4483475.html 在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方 ...
- nopi使用 设置列样式 宽高 设置分页符
HSSFWorkbook book = new HSSFWorkbook(); ISheet sheet = book.CreateSheet("test_01"); sheet. ...
- 引用CSS文件到html网页里方法
引用CSS文件到Html方法-css引入,css引用 使用不同的方法来引用css样式表,最终到达的效果相同,但是使用不同方法应用的css文件将影响到SEO及网页打开速度效率. html引用cs ...
- Django 分页查询并返回jsons数据,中文乱码解决方法
Django 分页查询并返回jsons数据,中文乱码解决方法 一.引子 Django 分页查询并返回 json ,需要将返回的 queryset 序列化, demo 如下: # coding=UTF- ...
- perl 引用(数组和hash引用) --- perlreftut - Mark 的一个简单的'引用'教程 ---Understand References Today. --Mark Jason Dominus, Plover Systems (mjd-perl-ref+@plover.com)
https://blog.csdn.net/fangwei1235/article/details/8570886 首页 博客 学院 下载 论坛 APP 问答 商城 活动 VIP会员 招聘 ITeye ...
- Jmeter引用外部jar包的几种方法
总结记录下jmeter引用外部jar包的3种方法及其优缺点: 一.测试计划中添加目录或jar包到Classpath 操作:测试计划->添加目录或jar包到Classpath-->浏览导入j ...
- Java四大引用详解:强引用、软引用、弱引用、虚引用
面试官考察Java引用会问到强引用.弱引用.软引用.虚引用,具体有什么区别?本篇单独来详解 @mikechen Java引用 从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活 ...
随机推荐
- ubuntu16 64位 编译64位程序和32位程序
安装了ubuntu16 64位的系统,想在该环境下用gcc编译64位和32位的程序 默认已经安装了64位环境的gcc 1. 首先确认安装的环境是不是64位的 cocoa@cocoaUKlyn:~/De ...
- Oracle表被锁无法问题处理
1:查出锁定表的信息SELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine,s.termin ...
- SoapUI Pro Project Solution Collection –Easy develop Groovy Script to improve SoapUI ability
As you know the groovy script and java script language is the soapui supported .but unfortunately So ...
- 启用phpstorm代码提示功能
参考:http://www.dawnfly.cn/article-1-331.html mac下实际上将省电禁用即可
- 基于Centos搭建Python Web 环境搭建教程
CentOS 7.2 64 位操作系统 安装 setuptools 工具 安装 因为之后我们需要安装 Django ,而 Django 需要用这个工具,所以我们需要先安装 setuptools 工具. ...
- Asp.Net MVC4中的全局过滤器
可以对整个项目进行全局监控. 新建一个MVC4项目,可以在global.asax文件中看到如下代码: FilterConfig.RegisterGlobalFilters(GlobalFilters ...
- easyui tab上面添加右键菜单
说扩展,我觉得有点过了,只是加入了右击TAB选项卡时显示关闭的上下文菜单,先看下效果图: 具体实现代码: 右键菜单 HTML: <div id="mm" class=&quo ...
- Github忽略keil工程生成的链接、编译等文件
*.bak *.ddk *.edk *.lst *.lnp *.mpf *.mpj *.obj *.omf *.plg *.rpt *.tmp *.__i *.crf *.o *.d *.axf *. ...
- ab压力测试工具的简单使用
ab是一种用于测试Apache超文本传输协议(HTTP)服务器的工具.apache自带ab工具,可以测试 apache.IIs.tomcat.nginx等服务器 但是ab没有Jmeter.Loadru ...
- JAVA(六)数据库/网络编程/新IO
成鹏致远 | lcw.cnblog.com |2014-02-05 数据库 1.JDBC概述 JDBC(Java Database Connectivity,Java数据库连接)提供了一种与平台无关的 ...