tp5 Bootstrap分页 添加每页显示数量

14 篇文章 0 订阅

萤火小程序商城后台

需求:框架列表默认每页显示15条,添加一个输入框,输入每页显示数量

改造前

改造后

 

\thinkphp\library\think\paginator\driver\Bootstrap.php 修改render函数,添加一个生成每页显示条数输入框函数

     /**
     * 渲染分页html
     * @return mixed
     */
    public function render()
    {
        if ($this->hasPages()) {
            if ($this->simple) {
                return sprintf(
                    '<ul class="pager">%s %s %s</ul>',
                    $this->getPreviousButton(),
                    $this->getNextButton(),
                    $this->setPageSize()
                );
            } else {
                return sprintf(
                    '<ul class="pagination">%s %s %s %s</ul>',
                    $this->getPreviousButton(),
                    $this->getLinks(),
                    $this->getNextButton(),
                    $this->setPageSize()
                );
            }
        }
    }

    /**
     * 生成每页显示条数输入框
     * date 2021-04-24 14:41:08
     * author zm
     * @return string
     */
    protected function setPageSize(){
        $page = 1;
        $url = $this->url( $page);
        //输入框显示
        if(strpos($url,'page_size') !== false){
            //获取url参数
            $queryParts = explode('&', $url);
            $params = array();
            foreach ($queryParts as $param) {
                $item = explode('=', $param);
                $params[$item[0]] = $item[1];
            }
            $page_size = $params['page_size'];

            //url去除 &page_size=xxx
            $len = strlen($page_size) + 11;
            $url = substr($url, 0, '-'.$len);

        }else{
            $page_size = 15;
        }

        $str = '<li class="am-input-group am-input-group-sm tpl-form-border-form"><input class="am-form-field am-radius am-input-sm" style="width: 45px;" type="text" name="page_size" id="page_size" title="每页显示数据条数" value='. $page_size .' ></li>';
        $str .= '<li><a href="" id="page_size_btn" data-url="' . htmlentities($url) . '"> 确定 </a></li>';
        $str .= '<script>  $("#page_size_btn").click(function () {  
                var url = $(this).data()["url"]; 
                var page_size = $("#page_size").val();
                var new_url = url + "&page_size=" + page_size; 
                $(this).attr("href",new_url) ; })</script>';

        return $str;

    }

\thinkphp\library\think\db\Query.php

public function paginate($listRows = null, $simple = false, $config = [])
    {
        if (is_int($simple)) {
            $total  = $simple;
            $simple = false;
        }
        if (is_array($listRows)) {
            $config   = array_merge(Config::get('paginate'), $listRows);
            $listRows = $config['list_rows'];
        } else {
            $config   = array_merge(Config::get('paginate'), $config);
            $listRows = $listRows ?: $config['list_rows'];
        }

        //前端输入的每页显示数量
        $page_size = request()->param('page_size');
        if(!empty($page_size) && preg_match("/^[1-9][0-9]*$/" ,$page_size) ){
            //有输入并且为正整数
            $listRows = $page_size;
        }

        //coding...
}

前端页面

<div class="am-u-lg-12 am-cf">
    <div class="am-fr"><?= $list->render() ?> </div>
    <div class="am-fr pagination-total am-margin-right">
         <div class="am-vertical-align-middle">总记录:<?= $list->total() ?></div>
     </div>
</div>

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值