zoukankan      html  css  js  c++  java
  • 11.ThinkPHP分页

    分页实现

    ThinkPHP5.1内置了分页实现,要给数据添加分页输出功能变得非常简单,可以直接在Db类查询的时候调用paginate方法:

    官方Demo

    // 查询状态为1的用户数据 并且每页显示10条数据
    $list = Db::name('user')->where('status',1)->paginate(10);
    // 把分页数据赋值给模板变量list
    $this->assign('list', $list);
    // 渲染模板输出
    return $this->fetch();
    

    也可以改成模型的分页查询代码:

    // 查询状态为1的用户数据 并且每页显示10条数据
    $list = User::where('status',1)->paginate(10);
    // 把分页数据赋值给模板变量list
    $this->assign('list', $list);
    // 渲染模板输出
    return $this->fetch();
    

    模板文件中分页输出代码如下:

    <div>
    <ul>
    {volist name='list' id='user'}
        <li> {$user.nickname}</li>
    {/volist}
    </ul>
    </div>
    {$list|raw}
    

    也可以单独赋值分页输出的模板变量

    // 查询状态为1的用户数据 并且每页显示10条数据
    $list = User::where('status',1)->paginate(10);
    // 获取分页显示
    $page = $list->render();
    // 模板变量赋值
    $this->assign('list', $list);
    $this->assign('page', $page);
    // 渲染模板输出
    return $this->fetch();
    

    模板文件中分页输出代码如下:

    <div>
    <ul>
    {volist name='list' id='user'}
        <li> {$user.nickname}</li>
    {/volist}
    </ul>
    </div>
    {$page|raw}
    

    默认情况下,生成的分页输出是完整分页功能,带总分页数据和上下页码,分页样式只需要通过样式修改即可,完整分页默认生成的分页输出代码为:

    <ul class="pagination">
    <li><a href="?page=1">&laquo;</a></li>
    <li><a href="?page=1">1</a></li>
    <li class="active"><span>2</span></li>
    <li class="disabled"><span>&raquo;</span></li>
    </ul>
    

    如果你需要单独获取总的数据,可以使用

    // 查询状态为1的用户数据 并且每页显示10条数据
    $list = User::where('status',1)->paginate(10);
    // 获取总记录数
    $count = $list->total();
    // 把分页数据赋值给模板变量list
    $this->assign('list', $list);
    // 渲染模板输出
    return $this->fetch();
    

    Demo 结合bootstrap 3 和视图

    视图文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>文章列表</title>
        <link rel="stylesheet" href="/static/index/css/bootstrap.css"/>
        <link rel="stylesheet" href="/static/index/css/bootstrap-theme.css"/>
    </head>
    <body>
    <br/>
    
    <div class="container">
        <table class="table table-hover">
            <thead>
            <tr>
                <th>id</th>
                <th>标题</th>
                <th>操作</th>
            </tr>
            </thead>
            <tbody>
            <!--模板循环取值-->
            {foreach $data as $item}
            <tr>
                <td>{$item.id}</td>
                <td>{$item.title}</td>
                <td>
                    <div class="btn-group">
                        <a href="button" class="btn btn-xs btn-primary">修改</a>
                        <a href="button" class="btn btn-xs btn-danger">删除</a>
                    </div>
                </td>
            </tr>
            {/foreach}
            </tbody>
        </table>
        <!--分页-->
        <div>
            <!--推荐写法-->
            {$data|raw}
            <!--不推荐-->
            {/*:html_entity_decode ($data->render())*/}
        </div>
    </div>
    <script src="/static/index/js/bootstrap.js "></script>
    <script src="/static/js/jquery.min.js "></script>
    </body>
    </html>
    

    控制器

    <?php
    
    namespace appindexcontroller;
    
    use appcommonmodelArticles;
    use thinkController;
    use thinkRequest;
    class Article extends Controller
    {
        //列表页
        public  function index(Request $request){
            //分页
            $data = Articles::paginate(10);
            //查询对象中可用的方法
            //dump(get_class_methods($data));
            return view('index@article/index',compact('data'));
        }
    }
    

    路由

    //列表
    Route::get('article', '@index/article/index')->name('article');
    

    运行效果

    image-20200527184644551

    直接输出json数据

    例:

    控制器

    <?php
    
    namespace appindexcontroller;
    
    use appcommonmodelArticles;
    use thinkController;
    use thinkRequest;
    
    class Article extends Controller
    {
        //列表页
        public  function index(Request $request){
            //分页                   每页多少条
            $data = Articles::paginate(10);
    
            //dump($data);
            //查询对象中可用的方法
            //dump(get_class_methods($data));
    
    		//返回json
            return json($data->toArray());
        }
    }
    

    运行结果

    image-20200527185816259

    传入总记录数

    支持传入总记录数而不会自动进行总数计算,例如:

    // 查询状态为1的用户数据 并且每页显示10条数据 总记录数为1000
    $list = User::where('status',1)->paginate(10,1000);
    // 获取分页显示
    $page = $list->render();
    // 模板变量赋值
    $this->assign('list', $list);
    $this->assign('page', $page);
    // 渲染模板输出
    return $this->fetch();
    

    对于UNION查询以及一些特殊的复杂查询,推荐使用这种方式首先单独查询总记录数,然后再传入分页方法

    分页后数据处理

    支持分页类后数据直接each遍历处理,方便修改分页后的数据,而不是只能通过模型的获取器来补充字段。

    $list = User::where('status',1)->paginate()->each(function($item, $key){
        $item->nickname = 'think';
    });
    

    如果是Db类操作分页数据的话,each方法的闭包函数中需要使用返回值,例如:

    $list = Db::name('user')->where('status',1)->paginate()->each(function($item, $key){
        $item['nickname'] = 'think';
        return $item;
    });
    

    简洁分页

    如果你仅仅需要输出一个 仅仅只有上下页的分页输出,可以使用下面的简洁分页代码:

    // 查询状态为1的用户数据 并且每页显示10条数据
    $list = User::where('status',1)->paginate(10,true);
    // 把分页数据赋值给模板变量list
    $this->assign('list', $list);
    // 渲染模板输出
    return $this->fetch();
    

    简洁分页模式的输出代码为:

    <ul class="pager">
    <li><a href="?page=1">&laquo;</a></li>
    <li class="disabled"><span>&raquo;</span></li>
    </ul>
    

    由于简洁分页模式不需要查询总数据数,因此可以提高查询性能。

    分页参数

    主要的分页参数如下:

    参数 描述
    list_rows 每页数量
    page 当前页
    path url路径
    query url额外参数
    fragment url锚点
    var_page 分页变量
    type 分页类名

    分页参数的设置方式有两种,第一种是在配置文件paginate.php中定义,例如:

    //分页配置
    return [
        'type'     => 'bootstrap',
        'var_page' => 'page',
    ];
    

    type属性支持命名空间,例如:

    //分页配置
    return [
        'type'     => 'orgpageootstrap',
        'var_page' => 'page',
    ];
    

    也可以在调用分页方法的时候传入,例如:

    $list = Db::name('user')->where('status',1)->paginate(10,true,[
        'type'     => 'bootstrap',
        'var_page' => 'page',
    ]);
    

    如果需要在分页的时候传入查询条件,可以使用query参数拼接额外的查询参数

    简介分页和分页参数使用Demo

    //参数1,每页多少条,参数2 是否是简介分页,参数3 url路径
    $data = MediaModel::paginate(2,false,['path' => url('index/material/index')]);
    return view('index@/material/index',compact('data'));
    
  • 相关阅读:
    sp2010 升级sp2013 用户无法打开网站
    powerviot install in sharepoint 2013
    can not connect cube in performancce dashboard
    westrac server security configure user info
    添加报表服务在多服务器场
    sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法
    delete job definition
    目前付款申请单内网打开慢的问题
    item style edit in sharepoint 2013
    Could not load file or assembly '$SharePoint.Project.AssemblyFullName$'
  • 原文地址:https://www.cnblogs.com/makalochen/p/12975678.html
Copyright © 2011-2022 走看看