Thinkphp6 自定义分页样式
Posted autofelix
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Thinkphp6 自定义分页样式相关的知识,希望对你有一定的参考价值。
〝 古人学问遗无力,少壮功夫老始成 〞
在学习thinkphp框架时候,对于分页的而言,很多人觉得自带的分页功能经常不适用于自己的网站,主要是因为自带的分页样式跟前端给的分页样式不统一,会很难看,很容易让小白弃坑。如果这篇文章能给你带来一点帮助,希望给飞兔小哥哥一键三连,表示支持,谢谢各位小伙伴们。
目录
一、修改服务提供者文件
- 在 app/provider.php 文件中添加分页提供类
<?php
use app\\ExceptionHandle;
use app\\Request;
// 容器Provider定义文件
return [
// 其他服务....
// 分页类服务提供者
'think\\Paginator' => 'app\\common\\paginator\\Page',
];
二、定义分页类
- 创建 app/common/paginator/Page.php 文件
- 并在其中添加以下内容
- 如果跟自己前端页面的分页样式不一样,就将该文件中的分页标签改成前端的一致即可
- 不需要自己重新写分页样式的
- 模板中使用 $page|raw 即可进行分页渲染
<?php
namespace app\\common\\paginator;
use think\\Paginator;
class Page 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(
'<ul class="pager">%s %s</ul>',
$this->getPreviousButton(),
$this->getNextButton()
);
else
return sprintf(
'<ul class="pagination">%s %s %s</ul>',
$this->getPreviousButton(),
$this->getLinks(),
$this->getNextButton()
);
/**
* 生成一个可点击的按钮
*
* @param string $url
* @param string $page
* @return string
*/
protected function getAvailablePageWrapper(string $url, string $page): string
return '<li><a href="' . htmlentities($url) . '">' . $page . '</a></li>';
/**
* 生成一个禁用的按钮
*
* @param string $text
* @return string
*/
protected function getDisabledTextWrapper(string $text): string
return '<li class="disabled"><span>' . $text . '</span></li>';
/**
* 生成一个激活的按钮
*
* @param string $text
* @return string
*/
protected function getActivePageWrapper(string $text): string
return '<li class="active"><span>' . $text . '</span></li>';
/**
* 生成省略号按钮
*
* @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);
以上是关于Thinkphp6 自定义分页样式的主要内容,如果未能解决你的问题,请参考以下文章