本文實例為大家分享了php分頁類的具體代碼,供大家參考,具體內容如下
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
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
|
<?php /** file: page.class.php 完美分頁類 Page */ class Page { private $total ; //數據表中總記錄數 private $listRows ; //每頁顯示行數 private $limit ; //SQL語句使用limit從句,限制獲取記錄個數 private $uri ; //自動獲取url的請求地址 private $pageNum ; //總頁數 private $page ; //當前頁 private $config = array ( 'head' => "條記錄" , 'prev' => "上一頁" , 'next' => "下一頁" , 'first' => "首頁" , 'last' => "末頁" ); //在分頁信息中顯示內容,可以自己通過set()方法設置 private $listNum = 10; //默認分頁列表顯示的個數 /** 構造方法,可以設置分頁類的屬性 @param int $total 計算分頁的總記錄數 @param int $listRows 可選的,設置每頁需要顯示的記錄數,默認為25條 @param mixed $query 可選的,為向目標頁面傳遞參數,可以是數組,也可以是查詢字符串格式 @param bool $ord 可選的,默認值為true, 頁面從第一頁開始顯示,false則為最后一頁 */ public function __construct( $total , $listRows =25, $query = "" , $ord =true){ $this ->total = $total ; $this ->listRows = $listRows ; $this ->uri = $this ->getUri( $query ); $this ->pageNum = ceil ( $this ->total / $this ->listRows); /*以下判斷用來設置當前面*/ if (! empty ( $_GET [ "page" ])) { $page = $_GET [ "page" ]; } else { if ( $ord ) $page = 1; else $page = $this ->pageNum; } if ( $total > 0) { if (preg_match( '/\D/' , $page ) ){ $this ->page = 1; } else { $this ->page = $page ; } } else { $this ->page = 0; } $this ->limit = "LIMIT " . $this ->setLimit(); } /** 用于設置顯示分頁的信息,可以進行連貫操作 @param string $param 是成員屬性數組config的下標 @param string $value 用于設置config下標對應的元素值 @return object 返回本對象自己$this, 用于連慣操作 */ function set( $param , $value ){ if ( array_key_exists ( $param , $this ->config)){ $this ->config[ $param ] = $value ; } return $this ; } /* 不是直接去調用,通過該方法,可以使用在對象外部直接獲取私有成員屬性limit和page的值 */ function __get( $args ){ if ( $args == "limit" || $args == "page" ) return $this -> $args ; else return null; } /** 按指定的格式輸出分頁 @param int 0-7的數字分別作為參數,用于自定義輸出分頁結構和調整結構的順序,默認輸出全部結構 @return string 分頁信息內容 */ function fpage(){ $arr = func_get_args(); $html [0] = "<span class='p1'> 共<b> {$this->total} </b>{$this->config[" head "]} </span>" ; $html [1] = " 本頁 <b>" . $this ->disnum(). "</b> 條 " ; $html [2] = " 本頁從 <b>{$this->start()}-{$this->end()}</b> 條 " ; $html [3] = " <b>{$this->page}/{$this->pageNum}</b>頁 " ; $html [4] = $this ->firstprev(); $html [5] = $this ->pageList(); $html [6] = $this ->nextlast(); $html [7] = $this ->goPage(); $fpage = '<div style="font:12px \'\5B8B\4F53\',san-serif;">' ; if ( count ( $arr ) < 1) $arr = array (0, 1,2,3,4,5,6,7); for ( $i = 0; $i < count ( $arr ); $i ++) $fpage .= $html [ $arr [ $i ]]; $fpage .= '</div>' ; return $fpage ; } /* 在對象內部使用的私有方法,*/ private function setLimit(){ if ( $this ->page > 0) return ( $this ->page-1)* $this ->listRows. ", {$this->listRows}" ; else return 0; } /* 在對象內部使用的私有方法,用于自動獲取訪問的當前URL */ private function getUri( $query ){ $request_uri = $_SERVER [ "REQUEST_URI" ]; $url = strstr ( $request_uri , '?' ) ? $request_uri : $request_uri . '?' ; if ( is_array ( $query )) $url .= http_build_query( $query ); else if ( $query != "" ) $url .= "&" .trim( $query , "?&" ); $arr = parse_url ( $url ); if (isset( $arr [ "query" ])){ parse_str ( $arr [ "query" ], $arrs ); unset( $arrs [ "page" ]); $url = $arr [ "path" ]. '?' .http_build_query( $arrs ); } if ( strstr ( $url , '?' )) { if ( substr ( $url , -1)!= '?' ) $url = $url . '&' ; } else { $url = $url . '?' ; } return $url ; } /* 在對象內部使用的私有方法,用于獲取當前頁開始的記錄數 */ private function start(){ if ( $this ->total == 0) return 0; else return ( $this ->page-1) * $this ->listRows+1; } /* 在對象內部使用的私有方法,用于獲取當前頁結束的記錄數 */ private function end (){ return min( $this ->page * $this ->listRows, $this ->total); } /* 在對象內部使用的私有方法,用于獲取上一頁和首頁的操作信息 */ private function firstprev(){ if ( $this ->page > 1) { $str = " <a href='{$this->uri}page=1'>{$this->config[" first "]}</a> " ; $str .= "<a href='{$this->uri}page=" .( $this ->page-1). "'>{$this->config[" prev "]}</a> " ; return $str ; } } /* 在對象內部使用的私有方法,用于獲取頁數列表信息 */ private function pageList(){ $linkPage = " <b>" ; $inum = floor ( $this ->listNum/2); /*當前頁前面的列表 */ for ( $i = $inum ; $i >= 1; $i --){ $page = $this ->page- $i ; if ( $page >= 1) $linkPage .= "<a href='{$this->uri}page={$page}'>{$page}</a> " ; } /*當前頁的信息 */ if ( $this ->pageNum > 1) $linkPage .= "<span style='padding:1px 2px;background:#BBB;color:white'>{$this->page}</span> " ; /*當前頁后面的列表 */ for ( $i =1; $i <= $inum ; $i ++){ $page = $this ->page+ $i ; if ( $page <= $this ->pageNum) $linkPage .= "<a href='{$this->uri}page={$page}'>{$page}</a> " ; else break ; } $linkPage .= '</b>' ; return $linkPage ; } /* 在對象內部使用的私有方法,獲取下一頁和尾頁的操作信息 */ private function nextlast(){ if ( $this ->page != $this ->pageNum) { $str = " <a href='{$this->uri}page=" .( $this ->page+1). "'>{$this->config[" next "]}</a> " ; $str .= " <a href='{$this->uri}page=" .( $this ->pageNum). "'>{$this->config[" last "]}</a> " ; return $str ; } } /* 在對象內部使用的私有方法,用于顯示和處理表單跳轉頁面 */ private function goPage(){ if ( $this ->pageNum > 1) { 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+\'\'"> ' ; } } /* 在對象內部使用的私有方法,用于獲取本頁顯示的記錄條數 */ private function disnum(){ if ( $this ->total > 0){ return $this -> end ()- $this ->start()+1; } else { return 0; } } } |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/dej-11/p/7722243.html