Home>Article>PHP Framework> ThinkPHP6 custom paging
ThinkPHP6.0 predefines the paginate paging class for us to help us quickly paginate. However, the paging style provided by ThinkPHP6 is not what we want. We need to extend the paging class ourselves and see how to implement it!
First we copy an official paging class and modify it on this basis. The specific path is vendor/topthink/think-orm/src/paginator/driver/Bootstrap.php. Then paste it in app/common/Bootstrap.php.
Modify the app/provider.php service provider and modify the default paging driver to be our driver.
Request::class, 'think\exception\Handle' => ExceptionHandle::class, 'think\Paginator' => 'app\common\Bootstrap' ];
Read the app/common/Bootstrap.php code and modify it based on this. The following is the officially provided paging code vendor/topthink/think-orm/src/paginator/driver/Bootstrap.php
// +---------------------------------------------------------------------- namespace think\paginator\driver; use think\Paginator; /** * Bootstrap 分页驱动 */ class Bootstrap extends Paginator { /** * 上一页按钮 * @param string $text * @return string */ protected function getPreviousButton(string $text = "«"): string { 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(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; $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( '
For example, simply modify the previous page and the next page to Chinese characters, modify the following places.
/** * 上一页按钮 * @param string $text * @return string */ protected function getPreviousButton(string $text = "上一页"): string { 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(string $text = '下一页'): string { if (!$this->hasMore) { return $this->getDisabledTextWrapper($text); } $url = $this->url($this->currentPage() + 1); return $this->getPageLinkWrapper($url, $text); }
Then modify it according to your business needs!
Recommended tutorials: "PHP Tutorial" "ThinkPHP Tutorial"
The above is the detailed content of ThinkPHP6 custom paging. For more information, please follow other related articles on the PHP Chinese website!