功能强大的php分页函数

时间:2022-02-23 13:14:41

分页是每一个程序需要去理解的东西,学习过的几门语言中我发现分页原理都是一样的,下面为php初学者分析一下php分页实现与最后面补充了一个超级强大的分页函数。

文章内容分页主要有两个办法:

办法一、按字数控制进行分页

按字数分页办法简单易用,但效果不好.

大致思想:首先、设定每页能容纳的最大字数,然后、计算文章内容的总字数,再由总字数和单页最大字数计算出出总页数,这样整个分页的准备工作就已经做好了.

具体到每一页的显示内容可以通过内容截取来实现,比如:页容纳500字,文章内容有2200字,那么当页面传递page=2时应该显示第501至1000之间的内容.

这种办法简单,但显示时可能会遇到麻烦,文章内容通常伴有HTML标签,进行内容切割时实现HTML标签的闭合有一定难度,如果这个工作没做好,那么分页后的效果显然也是不好的.

办法二、通过分页符进行分页

通过分页符进行分页比起第一种办法要更为理想。

大致思想:在编辑文章内容时往内容里面插入分页符(如:<hr class="page">),在文章显示时对文章内容进行分割,每一部分表示一个页的内容,通过传递参数控制显示第几页。

这种办法比较人性化,毕竟通过人工控制出来的分页截取的内容更符全我们的思维,而且可以一定程度上避免HTML标签不闭合的情形。

分页显示:分页显示是将大批量的数据分批发送到客户端的重要手段之一,通常是将数据库中的结果集人为的分成一段一段的来显示.

分类:PHP分页分为列表分页内容分页,不管是列表分页还是内容分页,基本原理是一样的,将数据分批发送到客户端.

pager.class.php:这是一个简单的PHP分页显示类,目前支持两种分页模式,一种是最简单的普通分页模式[首页] [上页] [下页] [尾页]模式,另一种是经典分页模式,即:[1][2][3][4][5][6][7][8][9][10][下一页][尾页].

使用方法,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
require_once 'pager.class.php';
$pager = new pager($totalPage,$currentPage); // $pager对象
echo $pager->showpager(); // 输出分页
此分页显示类的构造函数
/*
@total_page 总页数
@current_num 当前页
@sub_pages 每次显示的页数
@subPage_link 每个分页的链接
@subPage_type 分页模式
当@subPage_type=1的时候为普通分页模式
如: 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
当@subPage_type=2的时候为经典分页样式
如: 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
*/

代码如下:

pager($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2)

上述说的PHP分页的两种类别(列表分页和内容分页),相信列表分页对大家并不陌生,对于内容分页,常用的方法是以分页符的形式(比如: <hr class="pager"> )将内容分割成多段,求出总页数,用当前页码去获取分页显示列表,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
<?php
/**
 * 示例:
 * <?php
 * require_once("pager.class.php");
 * $subPages=new pager($totalPage,$currentPage);
 * echo $subPages->showpager();
 * ?>
 * */
class pager{
 var $each_disNums;//每页显示的条目数
 var $nums;//总条目数
 var $current_page;//当前被选中的页
 var $sub_pages;//每次显示的页数
 var $pageNums;//总页数
 var $page_array = array();//用来构造分页的数组
 var $subPage_link;//每个分页的链接
 var $subPage_type;//显示分页的类型
 var $_lang = array(
 'index_page' => '首页',
 'pre_page' => '上一页',
 'next_page' => '下一页',
 'last_page' => '尾页',
 'current_page' => '当前页:',
 'total_page' => '总页数:',
 'current_show' => '当前显示:',
 'total_record' => '总记录数:'
 );
 /*
 __construct是SubPages的构造函数,用来在创建类的时候自动运行.
 @total_page 总页数
 @current_num 当前被选中的页
 @sub_pages 每次显示的页数
 @subPage_link 每个分页的链接
 @subPage_type 显示分页的类型
 
 当@subPage_type=1的时候 www.phpfensi.com 为普通分页模式
 example: 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
 当@subPage_type=2的时候为经典分页样式
 example: 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
 */
 function __construct($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2){
 $this->pager($total_page,$current_page,$sub_pages,$subPage_link,$subPage_type);
 }
 
 function pager($total_page,$current_page,$sub_pages=10,$subPage_link='',$subPage_type=2){
 if(!$current_page){
 $this->current_page=1;
 }else{
 $this->current_page=intval($current_page);
 }
 $this->sub_pages=intval($sub_pages);
 $this->pageNums=ceil($total_page);
 if($subPage_link){
 if(strpos($subPage_link,'?page=') === false AND strpos($subPage_link,'&page=') === false){
 $subPage_link .= (strpos($subPage_link,'?') === false ? '?' : '&') . 'page=';
 }
 }
 $this->subPage_link=$subPage_link ? $subPage_link : $_SERVER['PHP_SELF'] . '?page=';
 $this->subPage_type = $subPage_type;
 }
 
 /*
 show_SubPages函数用在构造函数里面。而且用来判断显示什么样子的分页
 */
 function showpager(){
 if($this->subPage_type == 1){
 return $this->pagelist1();
 }elseif ($this->subPage_type == 2){
 return $this->pagelist2();
 }
 }
 
 
 /*
 用来给建立分页的数组初始化的函数。
 */
 function initArray(){
 for($i=0;$i<$this->sub_pages;$i++){
 $this->page_array[$i]=$i;
 }
 return $this->page_array;
 }
 
 
 /*
 construct_num_Page该函数使用来构造显示的条目
 即使:[1][2][3][4][5][6][7][8][9][10]
 */
 function construct_num_Page(){
 if($this->pageNums < $this->sub_pages){
 $current_array=array();
 for($i=0;$i<$this->pageNums;$i++){
 $current_array[$i]=$i+1;
 }
 }else{
 $current_array=$this->initArray();
 if($this->current_page <= 3){
 for($i=0;$i<count($current_array);$i++){
 $current_array[$i]=$i+1;
 }
 }elseif ($this->current_page <= $this->pageNums && $this->current_page > $this->pageNums - $this->sub_pages + 1 ){
 for($i=0;$i<count($current_array);$i++){
 $current_array[$i]=($this->pageNums)-($this->sub_pages)+1+$i;
 }
 }else{
 for($i=0;$i<count($current_array);$i++){
 $current_array[$i]=$this->current_page-2+$i;
 }
 }
 }
 
 return $current_array;
 }
 
 /*
 构造普通模式的分页
 共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
 */
 function pagelist1(){
 $subPageCss1Str="";
 $subPageCss1Str.= $this->_lang['current_page'] . $this->current_page." / " .$this->pageNums." &nbsp; ";
 if($this->current_page > 1){
 $firstPageUrl=$this->subPage_link."1";
 $prewPageUrl=$this->subPage_link.($this->current_page-1);
 $subPageCss1Str.="<a href='$firstPageUrl'>{$this->_lang['index_page']}</a> ";
 $subPageCss1Str.="<a href='$prewPageUrl'>{$this->_lang['pre_page']}</a> ";
 }else {
 $subPageCss1Str.="{$this->_lang['index_page']} ";
 $subPageCss1Str.="{$this->_lang['pre_page']} ";
 }
 
 if($this->current_page < $this->pageNums){
 $lastPageUrl=$this->subPage_link.$this->pageNums;
 $nextPageUrl=$this->subPage_link.($this->current_page+1);
 $subPageCss1Str.=" <a href='$nextPageUrl'>{$this->_lang['next_page']}</a> ";
 $subPageCss1Str.="<a href='$lastPageUrl'>{$this->_lang['last_page']}</a> ";
 }else {
 $subPageCss1Str.="{$this->_lang['next_page']} ";
 $subPageCss1Str.="{$this->_lang['last_page']} ";
 }
 
 return $subPageCss1Str;
 }
 
 
 /*
 构造经典模式分页
 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
 */
 function pagelist2(){
 $subPageCss2Str="";
 $subPageCss2Str.=$this->_lang['current_page'] . $this->current_page."/" . $this->pageNums." ";
 
 if($this->current_page > 1){
 $firstPageUrl=$this->subPage_link."1";
 $prewPageUrl=$this->subPage_link.($this->current_page-1);
 $subPageCss2Str.="<a href='$firstPageUrl'>{$this->_lang['index_page']}</a> ";
 $subPageCss2Str.="<a href='$prewPageUrl'>{$this->_lang['pre_page']}</a> ";
 }else {
 $subPageCss2Str.="{$this->_lang['index_page']} ";
 $subPageCss2Str.="{$this->_lang['pre_page']} ";
 }
 
 $a=$this->construct_num_Page();
 for($i=0;$i<count($a);$i++){
 $s=$a[$i];
 if($s == $this->current_page ){
 $subPageCss2Str.="[<span style='color:red;font-weight:bold;'>".$s."</span>]";
 }else{
 $url=$this->subPage_link.$s;
 $subPageCss2Str.="[<a href='$url'>".$s."</a>]";
 }
 }
 
 if($this->current_page < $this->pageNums){
 $lastPageUrl=$this->subPage_link.$this->pageNums;
 $nextPageUrl=$this->subPage_link.($this->current_page+1);
 $subPageCss2Str.=" <a href='$nextPageUrl'>{$this->_lang['next_page']}</a> ";
 $subPageCss2Str.="<a href='$lastPageUrl'>{$this->_lang['last_page']}</a> ";
 }else {
 $subPageCss2Str.="{$this->_lang['next_page']} ";
 $subPageCss2Str.="{$this->_lang['last_page']} ";
 }
 return $subPageCss2Str;
 }
 
 
 /*
 __destruct析构函数,当类不在使用的时候调用,该函数用来释放资源。
 */
 function __destruct(){
 unset($each_disNums);
 unset($nums);
 unset($current_page);
 unset($sub_pages);
 unset($pageNums);
 unset($page_array);
 unset($subPage_link);
 unset($subPage_type);
 }
}
?>

好了我们只要把它保存在一个文件,在其它地方要使用时直接调用就可以了,非常好用的一个内容或记录分页类函数哦,这也算是一个入门级别的php教程吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。