247 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			247 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | namespace page; | ||
|  | 
 | ||
|  | 
 | ||
|  | use think\Paginator; | ||
|  | 
 | ||
|  | /** | ||
|  |  * 自定义分页驱动 | ||
|  |  * | ||
|  |  * 通过css控制显示效果 | ||
|  |  * | ||
|  |  * Class DxtcPageA | ||
|  |  * @package paginate | ||
|  |  */ | ||
|  | class DxtcPageA extends Paginator | ||
|  | { | ||
|  |     protected $linkStr; | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 上一页按钮 | ||
|  |      * | ||
|  |      * @param string $tpl | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     protected function getPreviousButton(string $tpl = "上一页"): string | ||
|  |     { | ||
|  | 
 | ||
|  |         if ($this->currentPage() <= 1) { | ||
|  |             return ('<a href="javascript:;">'.$tpl.'</a>'); | ||
|  |         } | ||
|  | 
 | ||
|  |         $url = $this->url( | ||
|  |             $this->currentPage() - 1 | ||
|  |         ); | ||
|  | 
 | ||
|  | //        return  ($this->getPageLinkWrapper($url, "上一页" ,"") .$this->getPageLinkWrapper($url, $text ,"prev"));
 | ||
|  |         return ($this->getPageLinkWrapper($url, $tpl, "prev")); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 下一页按钮 | ||
|  |      * @param  $tpl | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     protected function getNextButton($tpl = '下一页'): string | ||
|  |     { | ||
|  | 
 | ||
|  |         if (!$this->hasMore) { | ||
|  |             return ('<a href="javascript:;">'.$tpl.'</a>'); | ||
|  |         } | ||
|  | 
 | ||
|  |         $url = $this->url($this->currentPage() + 1); | ||
|  | 
 | ||
|  |         return ($this->getPageLinkWrapper($url, $tpl, 'next')); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 首页按钮 | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     private function getFirstButton() | ||
|  |     { | ||
|  |         return ''; | ||
|  |         if ($this->lastPage > 1) { | ||
|  |             $url = $this->url(1); | ||
|  |             return $this->getPageLinkWrapper($url, '首页', "first"); | ||
|  |         } else { | ||
|  |             return  ''; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 最后一页按钮 | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     private function getLastButton() | ||
|  |     { | ||
|  |         return ''; | ||
|  |         if ($this->lastPage > 1) { | ||
|  |             $url = $this->url($this->lastPage); | ||
|  |             return $this->getPageLinkWrapper($url, '末页', "last"); | ||
|  |         } else { | ||
|  |             return  ''; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 页码按钮 | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     protected function getLinks(): string | ||
|  |     { | ||
|  |         if ($this->simple) { | ||
|  |             return ''; | ||
|  |         } | ||
|  | 
 | ||
|  |         $block = [ | ||
|  |             'first' => null, | ||
|  |             'slider' => null, | ||
|  |             'last' => null, | ||
|  |         ]; | ||
|  | 
 | ||
|  |         $side = 3; | ||
|  |         $window = $side * 1; | ||
|  | 
 | ||
|  |         if ($this->lastPage < $window + 3) { | ||
|  |             $block['first'] = $this->getUrlRange(1, $this->lastPage); | ||
|  |         } elseif ($this->currentPage <= $window) { | ||
|  |             $block['first'] = $this->getUrlRange(1, $window); | ||
|  |             $block['last'] = $this->getUrlRange($this->lastPage - 1, $this->lastPage); | ||
|  |         } elseif ($this->currentPage > ($this->lastPage - $window)) { | ||
|  |             $block['first'] = $this->getUrlRange(1, 2); | ||
|  |             $block['last'] = $this->getUrlRange($this->lastPage - ($window), $this->lastPage); | ||
|  |         } else { | ||
|  |             $block['first'] = $this->getUrlRange(1, 2); | ||
|  |             $block['slider'] = $this->getUrlRange($this->currentPage, $this->currentPage); | ||
|  |             $block['last'] = $this->getUrlRange($this->lastPage - 1, $this->lastPage); | ||
|  |         } | ||
|  | 
 | ||
|  |         $html = ''; | ||
|  | 
 | ||
|  |         if (is_array($block['first'])) { | ||
|  |             $html .= $this->getUrlLinks($block['first']); | ||
|  |         } | ||
|  | 
 | ||
|  |         if (is_array($block['slider'])) { | ||
|  |             $html .= $this->getDots(); | ||
|  |             $html .= $this->getUrlLinks($block['slider']); | ||
|  |         } | ||
|  | 
 | ||
|  |         if (is_array($block['last'])) { | ||
|  |             $html .= $this->getDots(); | ||
|  |             $html .= $this->getUrlLinks($block['last']); | ||
|  |         } | ||
|  | 
 | ||
|  |         return $html; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 渲染分页html | ||
|  |      * @return mixed | ||
|  |      */ | ||
|  |     public function render($linkStr = '', $pageBox='') | ||
|  |     { | ||
|  |         $this->linkStr = $linkStr; | ||
|  |         if ($this->hasPages()) { | ||
|  |             $pageDiv = !empty($pageBox) ? '<div '.$pageBox.'><div class="page-list">' : '<div class="page-list">'; | ||
|  |             if ($this->simple) { | ||
|  |                 return sprintf( | ||
|  |                     $pageDiv.'%s %s</div></div>', | ||
|  |                     $this->getPreviousButton(), | ||
|  |                     $this->getNextButton() | ||
|  |                 ); | ||
|  |             } else { | ||
|  |                 return sprintf( | ||
|  |                     $pageDiv.'%s %s %s %s %s</div></div>', | ||
|  |                     $this->getFirstButton(), | ||
|  |                     $this->getPreviousButton(), | ||
|  |                     $this->getLinks(), | ||
|  |                     $this->getNextButton(), | ||
|  |                     $this->getLastButton() | ||
|  |                 ); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 生成一个可点击的按钮 | ||
|  |      * | ||
|  |      * @param string $url | ||
|  |      * @param string $page | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     protected function getAvailablePageWrapper(string $url, string $page, $class = ""): string | ||
|  |     { | ||
|  |         //return '<li class="li" ><a href="' . htmlentities($url) . $this->linkStr.'" class="'.$class.'">' . $page . '</a></li>';
 | ||
|  |         return '<a href="' . htmlentities($url) . $this->linkStr . '" class="' . $class . '">' . $page . '</a>'; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 生成一个禁用的按钮 | ||
|  |      * | ||
|  |      * @param string $text | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     protected function getDisabledTextWrapper(string $text, $class = ""): string | ||
|  |     { | ||
|  |         //return '<li class="li disabled"  ><a class="'.$class.'">' . $text . '</a></li> ';
 | ||
|  |         return '<a class="' . $class . ' disabled">' . $text . '</a>'; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 生成一个激活的按钮 | ||
|  |      * | ||
|  |      * @param string $text | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     protected function getActivePageWrapper(string $text, $class = ""): string | ||
|  |     { | ||
|  |         //return '<li class="li"><a class="'.$class.'">' . $text . '</a></li>';
 | ||
|  |         return '<a class="' . $class . '">' . $text . '</a>'; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 生成省略号按钮 | ||
|  |      * | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     protected function getDots(): string | ||
|  |     { | ||
|  |         return $this->getDisabledTextWrapper('...'); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 批量生成页码按钮. | ||
|  |      * | ||
|  |      * @param array $urls | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     protected function getUrlLinks(array $urls): string | ||
|  |     { | ||
|  |         $html = ''; | ||
|  | 
 | ||
|  |         foreach ($urls as $page => $url) { | ||
|  |             $html .= $this->getPageLinkWrapper($url, $page); | ||
|  |         } | ||
|  | 
 | ||
|  |         return $html; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 生成普通页码按钮 | ||
|  |      * | ||
|  |      * @param string $url | ||
|  |      * @param string $page | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     protected function getPageLinkWrapper(string $url, string $page, $class = ""): string | ||
|  |     { | ||
|  |         if ($this->currentPage() == $page) { | ||
|  |             return $this->getActivePageWrapper($page, 'active cur'); | ||
|  |         } | ||
|  | 
 | ||
|  |         return $this->getAvailablePageWrapper($url, $page, $class); | ||
|  |     } | ||
|  | } |