ThinkPHP6.0模板采用的分页样式驱动是Bootstrap的,给我们预定义了paginate分页类,帮助我们快速分页,但是ThinkPHP6提供的分页按钮数量太多了,拼成一团在巴掌大的手机屏上显示得别扭!两种方案解决问题:
1、采用AJAX滚动屏幕触底请求更多数据插入到列表页DIV底部。目前很多大型网站都采用这种方案。但是自己要做好SEO优化收录问题,因为搜索引擎抓取数据时可不能去做AJAX请求更多。可能会导致更多内容不能被收录。只能借助搜索引擎快速键接提交API接口来实现提交文章内容保存同时后台自动提交网址给收录。
2、修改内核分页代码,实现传统分页按钮方式。
具体的路径在vendor/topthink/think-orm/src/paginator/driver/Bootstrap.php,并在此基础上进行修改。
$side = 3; //分页代码数量控制代码,改为1
<?phpclass Bootstrap extends Paginator{/*** 上一页按钮* @param string $text* @return string*/protected function getPreviousButton(string $text = "«"): string {if ($this->currentPage() getDisabledTextWrapper($text);}$url = $this->url($this->currentPage() - 1);return $this->getPageLinkWrapper($url, $text);}/*** 下一页按钮* @param string $text* @return string*/protected function getNextButton(string $text = '»'): string {if (!$this->hasMore) {return $this->getDisabledTextWrapper($text);}$url = $this->url($this->currentPage() + 1);return $this->getPageLinkWrapper($url, $text);}/*** 页码按钮* @return string*/protected function getLinks(): string {if ($this->simple) {return '';}$block = ['first' => null,'slider' => null,'last' => null,];$side = 3; //分页代码数量控制代码,改为1$window = $side * 2;if ($this->lastPage < $window + 6) {$block['first'] = $this->getUrlRange(1, $this->lastPage);} elseif ($this->currentPage 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('%s %s',$this->getPreviousButton(),$this->getNextButton());} else {return sprintf('%s %s %s',$this->getPreviousButton(),$this->getLinks(),$this->getNextButton());}}}/*** 生成一个可点击的按钮** @param string $url* @param string $page* @return string*/protected function getAvailablePageWrapper(string $url, string $page): string {return '' . $page . '';}/*** 生成一个禁用的按钮** @param string $text* @return string*/protected function getDisabledTextWrapper(string $text): string {return '' . $text . '';}/*** 生成一个激活的按钮** @param string $text* @return string*/protected function getActivePageWrapper(string $text): string {return '' . $text . '';}/*** 生成省略号按钮** @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): string {if ($this->currentPage() == $page) {return $this->getActivePageWrapper($page);}return $this->getAvailablePageWrapper($url, $page);}}例如简单修改上一页下一页为中文汉字,修改以下地方。/*** 上一页按钮* @param string $text* @return string*/protected function getPreviousButton(string $text = "上一页"): string {if ($this->currentPage() getDisabledTextWrapper($text);}$url = $this->url($this->currentPage() - 1);return $this->getPageLinkWrapper($url, $text);}/*** 下一页按钮* @param string $text* @return string*/protected function getNextButton(string $text = '下一页'): string {if (!$this->hasMore) {return $this->getDisabledTextWrapper($text);}$url = $this->url($this->currentPage() + 1);return $this->getPageLinkWrapper($url, $text);}
没有更多内容。


897