tp中的方法:
\think\Paginator::maker('app\common\Bootstrap');
\think\Paginator::maker(function ($items, $listRows, $currentPage, $total, $simple, $options){ return new \app\index\Bootstrap($items, $listRows, $currentPage, $total, $simple, $options); });
在调用分页paginate方法前这样设置可以实现,可不可类似tp那样,做一下类的绑定就能相互替换这样的?
要么等thinkorm更新分页参数中提供替换参数,要么就改 webman,在自定义函数文件 实现一个model,其中添加一下这段代码
好的,谢谢
新建一个自定义查询类
<?php namespace App\model; use extend\tools\BearPage; use think\db\Query; class MyQuery extends Query { public function pages($params = []) { $total = $this->count(); $list = $this->page(get_per_page(), get_per_limit())->select()->toArray(); $page = BearPage::getPageHtml(get_per_page(), ceil($total / get_per_limit()), $total, request()->path(), array_merge(request()->get(), $params)); return ['list' => $list, 'page' => $page]; } }
在thinkorm.php文件中添加
新建一个分页实现类
<?php namespace extend\tools; class BearPage { private static $current_page; private static $last_page; private static $total; private static $url; private static $params; /** * 生成分页代码 * @param int $current_page 当前页码 * @param int $last_page 最后一页 * @param int $total 总条数 * @param string $url 地址 * @param array $params 请求参数 */ public static function getPageHtml($current_page, $last_page, $total, $url, $params) { self::$current_page = $current_page; self::$last_page = $last_page; self::$total = $total; self::$url = $url; unset($params['_pjax']); self::$params = $params; return self::render(); } /** * 上一页按钮 * @param string $text * @return string */ private static function getPreviousButton($text = "«") { if (self::$current_page == 1) { return self::getDisabledTextWrapper($text); } self::$params['page'] = self::$current_page - 1; return self::getAvailablePageWrapper(self::$url . '?' . http_build_query(self::$params), $text); } /** * 下一页按钮 * @param string $text * @return string */ private static function getNextButton($text = '»') { if (self::$current_page == self::$last_page) { return self::getDisabledTextWrapper($text); } self::$params['page'] = self::$current_page + 1; return self::getAvailablePageWrapper(self::$url . '?' . http_build_query(self::$params), $text); } /** * 页码按钮 * @return string */ private static function getLinks() { $block = [ 'first' => null, 'slider' => null, 'last' => null, ]; $side = 3; $window = $side * 2; if (self::$last_page < $window + 6) { $block['first'] = self::getUrlRange(1, self::$last_page); } elseif (self::$current_page <= $window) { $block['first'] = self::getUrlRange(1, $window + 2); $block['last'] = self::getUrlRange(self::$last_page - 1, self::$last_page); } elseif (self::$current_page > (self::$last_page - $window)) { $block['first'] = self::getUrlRange(1, 2); $block['last'] = self::getUrlRange(self::$last_page - ($window + 2), self::$last_page); } else { $block['first'] = self::getUrlRange(1, 2); $block['slider'] = self::getUrlRange(self::$current_page - $side, self::$current_page + $side); $block['last'] = self::getUrlRange(self::$last_page - 1, self::$last_page); } $html = ''; if (is_array($block['first'])) { $html .= self::getUrlLinks($block['first']); } if (is_array($block['slider'])) { $html .= self::getDots(); $html .= self::getUrlLinks($block['slider']); } if (is_array($block['last'])) { $html .= self::getDots(); $html .= self::getUrlLinks($block['last']); } return $html; } private static function getUrlRange($first_page, $last_page) { $urls = []; for ($i = $first_page; $i <= $last_page; $i++) { self::$params['page'] = $i; $urls[$i] = self::$url . '?' . http_build_query(self::$params); } return $urls; } /** * 渲染分页html * @return mixed */ private static function render() { $options = [10, 20, 30, 50, 100]; $option = ''; $limit = get_per_limit(); foreach ($options as $item) { if ($item == $limit) { $option .= '<option value="' . $item . '" selected>' . $item . '</option>'; } else { $option .= '<option value="' . $item . '">' . $item . '</option>'; } } $html = ' <div class="box-footer"> <label class="control-label pull-left" style="margin-right: 10px; font-weight: 100;"> <small>共 %s 条记录</small> <small>每页显示</small> <select class="input-sm" onchange="changePerLimit(this)">%s</select> <small>条记录</small> </label> <ul class="pagination pagination-sm no-margin pull-left">%s %s %s</ul> </div>'; return sprintf( $html, self::$total, $option, self::getPreviousButton(), self::getLinks(), self::getNextButton() ); } /** * 生成一个可点击的按钮 * * @param string $url * @param int $page * @return string */ private static function getAvailablePageWrapper($url, $page) { return '<li><a data-pjax href="' . htmlentities($url) . '">' . $page . '</a></li>'; } /** * 生成一个禁用的按钮 * * @param string $text * @return string */ private static function getDisabledTextWrapper($text) { return '<li class="disabled"><span>' . $text . '</span></li>'; } /** * 生成一个激活的按钮 * * @param string $text * @return string */ private static function getActivePageWrapper($text) { return '<li class="active"><span>' . $text . '</span></li>'; } /** * 生成省略号按钮 * * @return string */ private static function getDots() { return self::getDisabledTextWrapper('...'); } /** * 批量生成页码按钮. * * @param array $urls * @return string */ private static function getUrlLinks(array $urls) { $html = ''; foreach ($urls as $page => $url) { $html .= self::getPageLinkWrapper($url, $page); } return $html; } /** * 生成普通页码按钮 * * @param string $url * @param int $page * @return string */ private static function getPageLinkWrapper($url, $page) { if (self::$current_page == $page) { return self::getActivePageWrapper($page); } return self::getAvailablePageWrapper($url, $page); } }
哇,谢谢
\think\Paginator::maker('app\common\Bootstrap');
\think\Paginator::maker(function ($items, $listRows, $currentPage, $total, $simple, $options){
return new \app\index\Bootstrap($items, $listRows, $currentPage, $total, $simple, $options);
});
在调用分页paginate方法前这样设置可以实现,可不可类似tp那样,做一下类的绑定就能相互替换这样的?
要么等thinkorm更新分页参数中提供替换参数,要么就改 webman,在自定义函数文件 实现一个model,其中添加一下这段代码
好的,谢谢
新建一个自定义查询类
在thinkorm.php文件中添加
新建一个分页实现类
哇,谢谢