<?php
2 namespace page;
3
4 use think\Paginator;
5
6 class Page extends Paginator
7 {
8
9 //首页
10 protected function home() {
11 if ($this->currentPage() > 1) {
12 return "<a href='" . $this->url(1) . "' title='首页'>首页</a>";
13 } else {
14 return "<p>首页</p>";
15 }
16 }
17
18 //上一页
19 protected function prev() {
20 if ($this->currentPage() > 1) {
21 return "<a href='" . $this->url($this->currentPage - 1) . "' title='上一页'>上一页</a>";
22 } else {
23 return "<p>上一页</p>";
24 }
25 }
26
27 //下一页
28 protected function next() {
29 if ($this->hasMore) {
30 return "<a href='" . $this->url($this->currentPage + 1) . "' title='下一页'>下一页</a>";
31 } else {
32 return"<p>下一页</p>";
33 }
34 }
35
36 //尾页
37 protected function last() {
38 if ($this->hasMore) {
39 return "<a href='" . $this->url($this->lastPage) . "' title='尾页'>尾页</a>";
40 } else {
41 return "<p>尾页</p>";
42 }
43 }
44
45 //统计信息
46 protected function info(){
47 return "<p class='pageRemark'>共<b>" . $this->lastPage .
48 "</b>页<b>" . $this->total . "</b>条数据</p>";
49 }
50
51 /**
52 * 页码按钮
53 * @return string
54 */
55 protected function getLinks()
56 {
57
58 $block = [
59 'first' => null,
60 'slider' => null,
61 'last' => null
62 ];
63
64 $side = 3;
65 $window = $side * 2;
66
67 if ($this->lastPage < $window + 6) {
68 $block['first'] = $this->getUrlRange(1, $this->lastPage);
69 } elseif ($this->currentPage <= $window) {
70 $block['first'] = $this->getUrlRange(1, $window + 2);
71 $block['last'] = $this->getUrlRange($this->lastPage - 1, $this->lastPage);
72 } elseif ($this->currentPage > ($this->lastPage - $window)) {
73 $block['first'] = $this->getUrlRange(1, 2);
74 $block['last'] = $this->getUrlRange($this->lastPage - ($window + 2), $this->lastPage);
75 } else {
76 $block['first'] = $this->getUrlRange(1, 2);
77 $block['slider'] = $this->getUrlRange($this->currentPage - $side, $this->currentPage + $side);
78 $block['last'] = $this->getUrlRange($this->lastPage - 1, $this->lastPage);
79 }
80
81 $html = '';
82
83 if (is_array($block['first'])) {
84 $html .= $this->getUrlLinks($block['first']);
85 }
86
87 if (is_array($block['slider'])) {
88 $html .= $this->getDots();
89 $html .= $this->getUrlLinks($block['slider']);
90 }
91
92 if (is_array($block['last'])) {
93 $html .= $this->getDots();
94 $html .= $this->getUrlLinks($block['last']);
95 }
96
97 return $html;
98 }
99
100 /**
101 * 渲染分页html
102 * @return mixed
103 */
104 public function render()
105 {
106 if ($this->hasPages()) {
107 if ($this->simple) {
108 return sprintf(
109 '%s<div class="pagination">%s %s %s</div>',
110 $this->css(),
111 $this->prev(),
112 $this->getLinks(),
113 $this->next()
114 );
115 } else {
116 return sprintf(
117 '%s<div class="pagination">%s %s %s %s %s %s</div>',
118 $this->css(),
119 $this->home(),
120 $this->prev(),
121 $this->getLinks(),
122 $this->next(),
123 $this->last(),
124 $this->info()
125 );
126 }
127 }
128 }
129
130 /**
131 * 生成一个可点击的按钮
132 *
133 * @param string $url
134 * @param int $page
135 * @return string
136 */
137 protected function getAvailablePageWrapper($url, $page)
138 {
139 return '<a href="' . htmlentities($url) . '" title="第"'. $page .'"页" >' . $page . '</a>';
140 }
141
142 /**
143 * 生成一个禁用的按钮
144 *
145 * @param string $text
146 * @return string
147 */
148 protected function getDisabledTextWrapper($text)
149 {
150 return '<p class="pageEllipsis">' . $text . '</p>';
151 }
152
153 /**
154 * 生成一个激活的按钮
155 *
156 * @param string $text
157 * @return string
158 */
159 protected function getActivePageWrapper($text)
160 {
161 return '<a href="" class="cur">' . $text . '</a>';
162 }
163
164 /**
165 * 生成省略号按钮
166 *
167 * @return string
168 */
169 protected function getDots()
170 {
171 return $this->getDisabledTextWrapper('...');
172 }
173
174 /**
175 * 批量生成页码按钮.
176 *
177 * @param array $urls
178 * @return string
179 */
180 protected function getUrlLinks(array $urls)
181 {
182 $html = '';
183
184 foreach ($urls as $page => $url) {
185 $html .= $this->getPageLinkWrapper($url, $page);
186 }
187
188 return $html;
189 }
190
191 /**
192 * 生成普通页码按钮
193 *
194 * @param string $url
195 * @param int $page
196 * @return string
197 */
198 protected function getPageLinkWrapper($url, $page)
199 {
200 if ($page == $this->currentPage()) {
201 return $this->getActivePageWrapper($page);
202 }
203
204 return $this->getAvailablePageWrapper($url, $page);
205 }
206
207 /**
208 * 分页样式
209 */
210 protected function css(){
211 return ' <style type="text/css">
212 .pagination p{
213 margin:0;
214 cursor:pointer
215 }
216 .pagination{
217 height:40px;
218 padding:20px 0px;
219 }
220 .pagination a{
221 display:block;
222 float:left;
223 margin-right:10px;
224 padding:2px 12px;
225 height:24px;
226 border:1px #cccccc solid;
227 background:#fff;
228 text-decoration:none;
229 color:#808080;
230 font-size:12px;
231 line-height:24px;
232 }
233 .pagination a:hover{
234 color:#077ee3;
235 background: white;
236 border:1px #077ee3 solid;
237 }
238 .pagination a.cur{
239 border:none;
240 background:#077ee3;
241 color:#fff;
242 }
243 .pagination p{
244 float:left;
245 padding:2px 12px;
246 font-size:12px;
247 height:24px;
248 line-height:24px;
249 color:#bbb;
250 border:1px #ccc solid;
251 background:#fcfcfc;
252 margin-right:8px;
253
254 }
255 .pagination p.pageRemark{
256 border-style:none;
257 background:none;
258 margin-right:0px;
259 padding:4px 0px;
260 color:#666;
261 }
262 .pagination p.pageRemark b{
263 color:red;
264 }
265 .pagination p.pageEllipsis{
266 border-style:none;
267 background:none;
268 padding:4px 0px;
269 color:#808080;
270 }
271 .dates li {font-size: 14px;margin:20px 0}
272 .dates li span{float:right}
273 </style>';
274 }
275 }
- 在extend\目录下创建page目录,在page目录下创建Page.php文件,将以下代码放入文件中。