| 
									
										
										
										
											2020-12-07 09:52:03 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | namespace tool; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use think\Paginator; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * 自定义分页模板 | 
					
						
							|  |  |  |  * Class CustomPageHelper | 
					
						
							|  |  |  |  * @package tool | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class CustomPageHelper extends Paginator | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     // 中间页码按钮个数
 | 
					
						
							|  |  |  |     protected $btnNumber = 10; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 首页
 | 
					
						
							|  |  |  |     protected function getFirstButton($str = '') | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ($this->currentPage() <= 1) { | 
					
						
							|  |  |  |             return $this->getDisabledTextWrapper($str); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $url = $this->url(1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $this->getPageLinkWrapper($url, $str); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 上一页
 | 
					
						
							|  |  |  |     protected function getPreviousButton($text = "«") | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($this->currentPage() <= 1) { | 
					
						
							|  |  |  |             return $this->getDisabledTextWrapper($text, 'prev'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $url = $this->url( | 
					
						
							|  |  |  |             $this->currentPage() - 1 | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $this->getPageLinkWrapper($url, $text, 'prev'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 页码
 | 
					
						
							|  |  |  |     protected function getLinks() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ($this->total > $this->listRows) { | 
					
						
							|  |  |  |             if ($this->lastPage < $this->btnNumber) { | 
					
						
							|  |  |  |                 return $this->getUrlLinks($this->getUrlRange(1, $this->lastPage), false); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 $min = 1; | 
					
						
							|  |  |  |                 if ($this->currentPage > $this->btnNumber / 2) $min = $this->currentPage - floor($this->btnNumber / 2); | 
					
						
							|  |  |  |                 if ($this->lastPage - $this->currentPage < $this->btnNumber / 2) $min = $this->lastPage - $this->btnNumber + 1; | 
					
						
							|  |  |  |                 $max = $min + $this->btnNumber - 1; | 
					
						
							|  |  |  |                 $ellipsis = false; | 
					
						
							|  |  |  |                 if ($this->lastPage > $max)  { | 
					
						
							|  |  |  |                     $ellipsis = true; | 
					
						
							|  |  |  |                     $max = $max - 1; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 return $this->getUrlLinks($this->getUrlRange($min, $max), $ellipsis); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 下一页
 | 
					
						
							|  |  |  |     protected function getNextButton($text = '»') | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!$this->hasMore) { | 
					
						
							|  |  |  |             return $this->getDisabledTextWrapper($text, 'next'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $url = $this->url($this->currentPage() + 1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $this->getPageLinkWrapper($url, $text, 'next'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 末页
 | 
					
						
							|  |  |  |     protected function getLastButton($text = '') | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!$this->hasMore) { | 
					
						
							|  |  |  |             return $this->getDisabledTextWrapper($text); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $url = $this->url($this->lastPage()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $this->getPageLinkWrapper($url, $text); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-09 09:29:22 +08:00
										 |  |  |     // 渲染分页 $btnNumber [0 只显示上下页 | >= 3]
 | 
					
						
							|  |  |  |     public function render($btnNumber = 10, $type = '') | 
					
						
							| 
									
										
										
										
											2020-12-07 09:52:03 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2020-12-09 09:29:22 +08:00
										 |  |  |         if($btnNumber == 0 || $btnNumber >= 3) { | 
					
						
							|  |  |  |             $this->btnNumber = $btnNumber; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-12-07 09:52:03 +08:00
										 |  |  |         //数据是否足够分页
 | 
					
						
							|  |  |  |         if ($this->hasPages()) { | 
					
						
							|  |  |  |             if(strtoupper($type) == 'A') { | 
					
						
							|  |  |  |                 return sprintf( | 
					
						
							|  |  |  |                     '<ul class="pageing">%s %s %s %s</ul>', | 
					
						
							|  |  |  |                     $this->getFirstButton('首页'), | 
					
						
							|  |  |  |                     $this->getPreviousButton('上一页'), | 
					
						
							|  |  |  |                     $this->getLinks(), | 
					
						
							|  |  |  |                     $this->getNextButton('下一页') | 
					
						
							|  |  |  |                 ); | 
					
						
							|  |  |  |             } elseif (strtoupper($type) == 'B') { | 
					
						
							|  |  |  |                 return sprintf( | 
					
						
							|  |  |  |                     '<ul class="pageing">%s %s %s %s %s</ul>', | 
					
						
							|  |  |  |                     $this->getFirstButton('首页'), | 
					
						
							|  |  |  |                     $this->getPreviousButton('上一页'), | 
					
						
							|  |  |  |                     $this->getLinks(), | 
					
						
							|  |  |  |                     $this->getNextButton('下一页'), | 
					
						
							|  |  |  |                     $this->getLastButton('末页') | 
					
						
							|  |  |  |                 ); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 return sprintf( | 
					
						
							|  |  |  |                     '<ul class="pageing">%s %s %s</ul>', | 
					
						
							|  |  |  |                     $this->getPreviousButton('上一页'), | 
					
						
							|  |  |  |                     $this->getLinks(), | 
					
						
							|  |  |  |                     $this->getNextButton('下一页') | 
					
						
							|  |  |  |                 ); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 生成禁用按钮
 | 
					
						
							|  |  |  |     protected function getDisabledTextWrapper($text, $htmlClass = '') | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return '<li class="disabled '.$htmlClass.'"><span>' . $text . '</span></li>'; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 生成普通按钮
 | 
					
						
							|  |  |  |     protected function getPageLinkWrapper($url, $page, $htmlClass = '') | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ($page == $this->currentPage()) { | 
					
						
							|  |  |  |             return $this->getActivePageWrapper($page, $htmlClass); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $this->getAvailablePageWrapper($url, $page, $htmlClass); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 生成当前页按钮
 | 
					
						
							|  |  |  |     protected function getActivePageWrapper($text, $htmlClass = '') | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return '<li class="cur "'.$htmlClass.'><span>' . $text . '</span></li>'; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 可点击按钮
 | 
					
						
							|  |  |  |     protected function getAvailablePageWrapper($url, $page, $htmlClass = '') | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return '<li class="'.$htmlClass.'"><a href="' . htmlentities($url) . '">' . $page . '</a></li>'; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 批量生成页码按钮
 | 
					
						
							|  |  |  |     protected function getUrlLinks(array $urls, bool $ellipsis, $htmlClass = '') | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $html = ''; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         foreach ($urls as $page => $url) { | 
					
						
							|  |  |  |             $html .= $this->getPageLinkWrapper($url, $page, $htmlClass); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-12-09 09:29:22 +08:00
										 |  |  |         if($ellipsis && $this->btnNumber > 0) { | 
					
						
							| 
									
										
										
										
											2020-12-07 09:52:03 +08:00
										 |  |  |             $html .= $this->getDisabledTextWrapper('...', $htmlClass); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $html; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |