mingyunyuziyou

tp5怎么实现搜索分页能保留搜索条件

作者: 秒速五厘米     
 


实现搜索分页能保留搜索条件 就这么简单

Db::name("table")->where("XXXX")->paginate(10,false,['query'=>request()->param()]);


例子

PHP代码

        $get    = input('get.');
        $phone    = input('get.phone');
        $email    = input('get.email');
        $pageParam    = ['query' =>[]];
      
        if ($phone) {
            $userModel->where('phone', 'like', "%{$phone}%");
            $this->assign('phone', $phone);
            $pageParam['query']['phone'] = $phone;
        }

        if ($email) {
            $userModel->where('email', 'like', "%{$email}%");
            $this->assign('email', $email);
            $pageParam['query']['email'] = $email;
        }
        

        $list = $userModel->paginate(3, false, $pageParam);
        $this->assign('list', $list);
        

        $this->assign('title', '会员列表');
        $this->assign('breadcrumb', ['后台首页', '用户管理', '会员列表']);
       
        return $this->fetch();


HTML代码

<div class="container">
    <!-- 查询BEG -->
    <div class="row">
        <div class="col-xs-12">
            <div class="me-searchbox">
                <form class="form-inline" role="form" method="get">
                      <div class="form-group">
                        <label for="phone">手机</label>
                        <input type="text" class="form-control" name="phone" placeholder="手机" value="{$phone ? $phone : '';}">
                      </div>
                      <div class="form-group">
                        <label for="email">邮箱</label>
                        <input type="text" class="form-control" name="email" placeholder="邮箱" value="{$email ? $email : '';}">
                      </div>
                      <button type="submit" class="btn btn-default">查询</button>
                 </form>
             </div>
        </div>
    </div>
    <!-- 查询END -->
    
    <!-- 表格BEG -->
    <div class="row">
        <div class="col-xs-12">
            <table class="table table-bordered">
                <thead>
                    <tr>
                        <th><input type="checkbox"></th>
                        <th>ID</th>
                        <th>妮称</th>
                        <th>手机</th>
                        <th>邮箱</th>
                    </tr>
                </thead>
                
                <tbody>
                    {volist name='list' id='user'}
                        <tr>
                            <td><input type="checkbox"></td>
                            <td>{$user.id}</td>
                            <td>{$user.nickname}</td>
                            <td>{$user.phone}</td>
                            <td>{$user.email}</td>
                        </tr>
                    {/volist}
                </tbody>
            </table>
        </div>
    </div>
    <!-- 表格END -->
    <!-- 分页导航BEG -->
    <div class="row">
        <div class="col-xs-12">
            {$list->render()}
        </div>
    </div>
    <!-- 分页导航END -->
    
    </div>


解释:使用 get 方法提交表单,在后台将查询条件作为 paginate() 方法的参数传入,这样查询条件就会写入分页标签的URL中。后台即可以通过表单也可以通过这个URL得到查询条件。


那个input搜索框的name名 必须跟表中对应的字段名一样? 否则就报什么未命名索引 或者 搜索分页以后数据不保留 ?


要求一样。因为分页的get参数列表是 $list = $userModel->paginate(3, false, $pageParam); 方法自动生成的,所以 $pageParam 中使用什么key,就查表的什么字段。而这个key又会成功get参数列表的key。
如果两者不同,要么查表时找不到字段,要么分页后get参数列表的key与第一页不同(变成表的字段名)。