基于TP5原有的bootstrap分页做的新样式 - Cod 发表于 2017-11-30 Typechopage.php 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237复制代码<?php/** * Created by PhpStorm. * User: hainuo * Date: 2017/11/30 * Time: 上午9:36 */namespace osc\common\paginator;use think\Paginator;class Typechopage extends Paginator{ /** * 上一页按钮 * @param string $text * @return string */ protected function getPreviousButton($text = "«") { if ($this->currentPage() <= 1) { return $this->getDisabledTextWrapper($text); } $url = $this->url( $this->currentPage() - 1 ); return $this->getPageLinkWrapper($url, $text); } /** * 下一页按钮 * @param string $text * @return string */ protected function getNextButton($text = '»') { if (!$this->hasMore) { return $this->getDisabledTextWrapper($text); } $url = $this->url($this->currentPage() + 1); return $this->getPageLinkWrapper($url, $text); } /** * 页码跳转按钮 * @return string */ protected function getGoToPage() { return '<li class=""><span style="padding: 0"><input style="width: 50px;padding: 5px;text-align: center" type="number" id="vThinkPHPGoPage" value="' . $this->currentPage() . '" /></span><button type="button" class="btn btn-sm btn-success" onclick="goPage(document.getElementById(\'vThinkPHPGoPage\').value)">go</button><script>function goPage(p){p=parseInt(p);if(p >0 ){var url = "' . $this->getGoToUrl() . $this->buildFragment() . '"+p;window.location.href=url;}else{alert("请输入正确的页码!");}}</script></li>'; } /** * 页码按钮 * @return string */ protected function getLinks() { if ($this->simple) return ''; $block = [ 'first' => null, 'slider' => null, 'last' => null ]; $side = 3; $window = $side * 2; if ($this->lastPage < $window + 6) { $block['first'] = $this->getUrlRange(1, $this->lastPage); } elseif ($this->currentPage <= $window) { $block['first'] = $this->getUrlRange(1, $window + 2); $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 + 2), $this->lastPage); } else { $block['first'] = $this->getUrlRange(1, 2); $block['slider'] = $this->getUrlRange($this->currentPage - $side, $this->currentPage + $side); $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() { if ($this->hasPages()) { if ($this->simple) { return sprintf( '<ul class="pager">%s %s %s</ul>', $this->getPreviousButton(), $this->getNextButton(), $this->getGoToPage() ); } else { return sprintf( '<ul class="pagination">%s %s %s %s</ul>', $this->getPreviousButton(), $this->getLinks(), $this->getNextButton(), $this->getGoToPage() ); } } } /** * 获取跳转的链接 不带页码 * * @return string */ protected function getGoToUrl() { $parameters = []; $path = $this->options['path']; if (count($this->options['query']) > 0) { $parameters = array_merge($this->options['query'], $parameters); } $url = $path; if (!empty($parameters)) { $url .= '?' . urldecode(http_build_query($parameters, null, '&')); $url .= '&page='; } else { $url .= '?page='; } return $url; } /** * 生成一个可点击的按钮 * * @param string $url * @param int $page * @return string */ protected function getAvailablePageWrapper($url, $page) { return '<li><a href="' . htmlentities($url) . '">' . $page . '</a></li>'; } /** * 生成一个禁用的按钮 * * @param string $text * @return string */ protected function getDisabledTextWrapper($text) { return '<li class="disabled"><span>' . $text . '</span></li>'; } /** * 生成一个激活的按钮 * * @param string $text * @return string */ protected function getActivePageWrapper($text) { return '<li class="active"><span>' . $text . '</span></li>'; } /** * 生成省略号按钮 * * @return string */ protected function getDots() { return $this->getDisabledTextWrapper('...'); } /** * 批量生成页码按钮. * * @param array $urls * @return string */ protected function getUrlLinks(array $urls) { $html = ''; foreach ($urls as $page => $url) { $html .= $this->getPageLinkWrapper($url, $page); } return $html; } /** * 生成普通页码按钮 * * @param string $url * @param int $page * @return string */ protected function getPageLinkWrapper($url, $page) { if ($page == $this->currentPage()) { return $this->getActivePageWrapper($page); } return $this->getAvailablePageWrapper($url, $page); }} 本文转载自: 掘金 开发者博客 – 和开发相关的 这里全都有