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 变量即可。
参考来源: