11.ThinkPHP分页

摘要:
render();{/volist}<Page=1“>liclass=“active”>licclass=“disabled”>span>&fetch();htmllang=“en”&gt,metacharaset=“UTF-8”&gt,文章列表<br/><divclass=“container”>

分页实现

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="http://t.zoukankan.com/?page=1">&laquo;</a></li>
<li><a href="http://t.zoukankan.com/?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="http://t.zoukankan.com/static/index/css/bootstrap.css"/>
    <link rel="stylesheet" href="http://t.zoukankan.com/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="http://t.zoukankan.com/button" class="btn btn-xs btn-primary">修改</a>
                    <a href="http://t.zoukankan.com/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="http://t.zoukankan.com/static/index/js/bootstrap.js "></script>
<script src="http://t.zoukankan.com/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="http://t.zoukankan.com/?page=1">&laquo;</a></li>
<li class="disabled"><span>&raquo;</span></li>
</ul>

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

分页参数

主要的分页参数如下:

参数描述
list_rows每页数量
page当前页
pathurl路径
queryurl额外参数
fragmenturl锚点
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'));

免责声明:文章转载自《11.ThinkPHP分页》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SSH Secure Shell 编码设置-----支持中文Spring-Gateway与Spring-Security在前后端分离项目中的实践下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

调试lua代码

lua没有调试器,但是它提供了很强的调试功能(debug 库), 所以其实一些常用的调试功能都能很方便的使用,就像使用一个命令行调试器一样: 【例子程序】 -- debug.luagvar1 = 100 function foo() local var2 = 10 function bar()...

很酷的页面布局框架

建高楼大厦时,我们总是先用钢筋水泥搭好骨架,然后再加砖添瓦,布置每套房屋。编写一个网页也是这样,须先将布局框架搭好稳固,之后才能游刃有余。本博文阐述如何实现了两栏布局(main栏和sub栏),三栏布局(main栏、sub栏和extra栏),以及布局中各栏的排列顺序。 本示例布局框架具有以下特性: 跨浏览器:兼容IE6。 稳固性:布局稳固,不受内容的影响。...

bat批量备份手机APP

  adbPath = ADB工具包文件夹(adb+aapt)backupPath = apk备份文件夹 @echo off & chcp 65001 & cls & cd /d "%~dp0" setlocal enabledelayedexpansion REM adb tool path set "adbPath=D:soft...

PHP(Mysql/Redis)消息队列的介绍及应用场景案例

在进行网站设计的时候,有时候会遇到给用户大量发送短信,或者订单系统有大量的日志需要记录,还有做秒杀设计的时候,服务器无法承受这种瞬间的压力,无法正常处理,咱们怎么才能保证系统正常有效的运行呢?这时候我们就要引用消息队列来实现这类的需求,这时候就需要一个中间的系统进行分流和解压。消息队列就是一个中间件,需要配合其他合理使用。  消息队列的概念、原理和场景 本...

Apache Commons-Codec的使用

处理常用的编码方法的工具类包 例如DES、SHA1、MD5、Base64等. 导入包: <!-- 这个是编码解码的 --><dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId...

TOPAS 命令详解

TOPAS命令详解Topas命令可以监控系统活动――memory,I/O,paging space,cpu,process。此命令包含在perfagent.tools文件集里面。命令使用方法:topas [ -d number_of_monitored_hot_disks ] [ -h ][ -i monitoring_interval_in_second...