webman 中仅提供了核心功能,但在日常开发中,并没有附加的组件,需要手动安装。
在会员中心(前台插件开发)时,需要用到分页,官方提供了分页使用方法。
这里介绍下,实际使用时要做的调整:
我使用了 illuminate/pagination 组件。官方说,不支持 $paginator->links() 方法,需要使用第三方插件来实现,如 jasongrimes/paginator。
通过:
composer require jasongrimes/paginator
来安装。但在使用时,渲染分页时,插件是基于 bootstrap v3 版本的,webman 是基于 bootstrap v4 版本的。因此需要调整分页渲染方式:
打开 vendor/jasongrimes/paginator/src/JasonGrimes/Paginator.php,修改 toHtml() 方法:
/**
* Render an HTML pagination control.
*
* @return string
*/
public function toHtml()
{
if ($this->numPages <= 1) {
return '';
}
$html = '<ul class="pagination">';
if ($this->getPrevUrl()) {
$html .= '<li class="page-item"><a class="page-link" href="' . htmlspecialchars($this->getPrevUrl()) . '" rel="external nofollow">« ' . $this->previousText . '</a></li>';
}
foreach ($this->getPages() as $page) {
if ($page['url']) {
$html .= '<li' . ($page['isCurrent'] ? ' class="active page-item"' : '') . '><a class="page-link" href="' . htmlspecialchars($page['url']) . '" rel="external nofollow">' . htmlspecialchars($page['num']) . '</a></li>';
} else {
$html .= '<li class="disabled page-item"><span class="page-link">' . htmlspecialchars($page['num']) . '</span></li>';
}
}
if ($this->getNextUrl()) {
$html .= '<li class="page-item"><a class="page-link" href="' . htmlspecialchars($this->getNextUrl()) . '" rel="external nofollow">' . $this->nextText . ' »</a></li>';
}
$html .= '</ul>';
return $html;
}控制中,使用:
public function list(Request $request)
{
/** @var int $perPage 分页大小 */
$perPage = 10;
$list = (new Client())
->where('user_id', session('user.id'))
->orderBy('id', 'desc')->paginate($perPage);
$paginator = new Paginator(
$list->total(),
$perPage,
$request->get('page'),
'/app/oauth/index/list?page=(:num)');
$paginator->setMaxPagesToShow(5);
$paginator->setNextText('下一页');
$paginator->setPreviousText('上一页');
return view('index/list', ['list' => $list, 'count' => $list->total(), 'paginator' => $paginator]);
}模板中,输出 $paginator 变量即可。
参考来源: