现在很多网站的数据量的很多,如果全部在一页里显示效果不好,数据量太大,那怎么办?这时我们就需要分页,而分页的好处就是分段显示数据,这样页面就不用加载很多数据,需要时才加载,下面我教大家实现ThinkPHP5分页。

在分页之前我们要先引入bootstrap的css。

第一种:使用limit实现分页(不建议使用)

limit方法也是模型类的连贯操作方法之一,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多。ThinkPHP的limit方法可以兼容所有的数据库驱动类的。

代码示例:

Db::table('think_article')->limit('10,25')->select();

从第10行开始的25条数据;使用limit很麻烦,不推荐大家使用,我就不详细讲了

第二种:使用page实现分页

page方法也是模型的连贯操作方法之一,是完全为分页查询而诞生的一个人性化操作方法。

后台代码:

$page = empty($params['page']) ? 1 : $params['page'];//获取当前页数
$Products = Db::table('Products')
->alias('a')
->join('ProductsBrand b','a.BrandId=b.BrandId')
->where($wheres)
->page($page,12)
->select();
$count = Db::table('Products')->count();//有多少条数据
$sum = $count/12;//要分多少页
$this->assign("Products",$Products);
$this->assign("sum",$sum);
$this->assign("page",$page);

前台代码:

<ul class="pagination">
{for start='1' comparison='<=' end='$sum'}
<li class="{if $i==$page}active{/if}"><a href="{:url('jade/index',['page'=>$i])}">{$i}</a></li>
{/for}
</ul>

第三种:使用paginate实现分页(推荐)

在tp5中使用bootstrap分页样式,其实根本不用那么麻烦,只需要引入bootstrap的css文件就可以了。原因是tp5在组装分页链接的时候,默认是组装bootstrap的分页样式链接,就是说,会自动加上class的属性ThinkPHP5.0内置了分页实现,要给数据添加分页输出功能在5.0变得非常简单,可以直接在Db类查询的时候调用paginate方法。

组装链接的函数在think5\thinkphp\library\think\paginator\driver\Bootstrap.php

后台代码:

// 每页显示12条数据
$Products = Db::table('Products')
->paginate(12);

前台代码:

<div class="f_page">
{$Products->render();}
</div>

第四种:模型分页

新闻栏目(Newsfl)

<?php
namespace app\index\model;
use think\Model; class Newsfl extends Model //新闻栏目分类
{
public function comm(){
return $this->hasMany('News','newsfl_id','id');
}
}

新闻(News)

<?php
namespace app\index\model;
use think\Model; class News extends Model //新闻
{ }

开发手册里的分页是如下形式:

$list = Db::name('news')->where('status',1)->paginate(10);
或者
$list = News::where('status',1)->paginate(10);

如果想在关联中实现分页,如下:

$news = Newsfl::get($id)->comm()->paginate(3);

注:comm()是关联方法

HTML+CSS分页的样式

HTML
<div class="f_page">
{$news->render()}
</div> CSS
/*分页样式*/
.f_page {
margin-top: 10px;
display: flex;
}
.f_page .pagination {
position: relative;
margin: auto;
height: 50px;
}
.f_page .pagination>li>a,.f_page .pagination>li>span {
font-size: 14px;
padding: 10px 20px;
margin: 0 2px;
color: #000;
}
.f_page .pagination>.active>span {
background: #00ae66;
color: #fff;
}
.f_page .pagination>.active>span:hover {
background: #00ae66;
}
.f_page .pagination>.active>span,.f_page .pagination>.active>span:hover{
border-color: #00ae66;
}
.f_page ul li a:hover {
background: #00ae66;
text-decoration: none;
color: #fff;
}

Thinkphp5——实现分页(模型和Db分页,多种方法)的更多相关文章

  1. ThinkPHP5——引入公共部分head和foot(多种方法)

    在项目中,header和footer重复使用的次数高,于是我们把header和footer作为公共部分,其他模板需要的话就引用.下面我教大家引用公共模板 1.使用include 首先在view下面新建 ...

  2. 扩展GridView实现的一个自定义无刷新分页,排序,支持多种数据源的控件TwfGridView

    最近项目View层越来越趋向于无刷新化,特别是数据展示方面,还要对Linq有很好的支持.在WebFrom模式的开发中,GridView是一个功能很强大,很常用的控件,但是他也不是完美的,没有自带的无刷 ...

  3. Laravel 5.4---后端数据分页和前端显示分页结果

    后端数据(Eloquent 模型)分页 事先建立好Eloquent 模型和Controller 还有 前台的View.可以参考我之前的文章:Laravel建站03--建立前台文章列表和文章详情 在co ...

  4. NOSQL数据模型和CAP原理

    NOSQL数据模型和CAP原理 http://blog.sina.com.cn/s/blog_7800d9210100t33v.html 我本来一直觉得NoSQL其实很容易理解的,我本身也已经对NoS ...

  5. MvcPager 概述 MvcPager 分页示例 — 标准Ajax分页 对SEO进行优化的ajax分页 (支持asp.net mvc)

    该示例演示如何使用MvcPager最基本的Ajax分页模式. 使用AjaxHelper的Pager扩展方法来实现Ajax分页,使用Ajax分页模式时,必须至少指定MvcAjaxOptions的Upda ...

  6. [ Laravel 5.6 文档 ]laravel数据库操作分页(自定义分页实现和自定义分页样式)

    简介 在其他框架中,分页可能是件非常痛苦的事,Laravel 让这件事变得简单.易于上手.Laravel 的分页器与查询构建器和 Eloquent ORM 集成在一起,并开箱提供方便的.易于使用的.基 ...

  7. (转载)OSI七层参考模型和TCP/IP四层参考模型

    Mallory   网络模型概念浅析 网络模型一般是指OSI七层参考模型和TCP/IP四层参考模型. #只是一种设计==模型# Open System Interconnect的缩写,意为开放式系统互 ...

  8. SSM 使用 mybatis 分页插件 pagehepler 实现分页

    使用分页插件的原因,简化了sql代码的写法,实现较好的物理分页,比写一段完整的分页sql代码,也能减少了误差性. Mybatis分页插件 demo 项目地址:https://gitee.com/fre ...

  9. 基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程

    许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存.CPU.缓存等予以说明.实际上,在实际的 ...

随机推荐

  1. Go netpoll I/O 多路复用构建原生网络模型之源码深度解析

    导言 Go 基于 I/O multiplexing 和 goroutine 构建了一个简洁而高性能的原生网络模型(基于 Go 的I/O 多路复用 netpoll),提供了 goroutine-per- ...

  2. 详解SpringBoot应用跨域访问解决方案

    一.什么是跨域访问 说到跨域访问,必须先解释一个名词:同源策略.所谓同源策略就是在浏览器端出于安全考量,向服务端发起请求必须满足:协议相同.Host(ip)相同.端口相同的条件,否则访问将被禁止,该访 ...

  3. Java编程思想笔记——赋值

    赋值使用操作符“=”.它的意思是“取右边的值(即右值),把它复制给左边(即左值)”.右值可以是任何常数.变量或者表达式(只要它能生成一个值就行).但左值必须是一个明确的.已命名的变量.也就是说,必须有 ...

  4. 运维自动化管理服务器 CheungSSH

    CheungSSH 是一款中国人自主研发的Linux运维自动化管理服务器软件,后端使用 Python 语言+Django 的 Web 框架,前端使用 Bootstrap+Javascript+jQue ...

  5. 【倒腾HTTPS】Nginx for Docker自签名SSL证书

    前言 合格的web程序员, 必须能自由在 IIS. Nginx. Nginx for Docker上配置Https服务, 博客最近将专题记录 Https  &   Hsts 如何申请适用于生产 ...

  6. it公司比较

    1:本人西电通院2013届毕业硕士,根据今年找工作的情况以及身边同学的汇总,总结各大公司的待遇如下,吐血奉献给各位学弟学妹,公司比较全,你想去的公司不在这里面,基本上是无名小公司了:但无名小公司有时也 ...

  7. jquery 用creatjs preloadjs的方法

    jquery 用creatjs preloadjs的方法<pre><!DOCTYPE html><html lang="en"><head ...

  8. javascript获取上传图片的大小

    javascript获取上传图片的大小 <pre><input id="file" type="file"> <input id= ...

  9. .NET Core 对龙芯的支持情况和对 .NET Core 开发嵌入式的思考

    目录 .NET Core 对龙芯的支持情况和对 .NET Core 开发嵌入式的思考 一,遗憾的尝试 二,.NET Core在嵌入式下的几点不足 三,.NET Core 龙芯移植的进展和资料 .NET ...

  10. node真的是单线程模式吗

    提到node,我们就可以立刻想到单线程.异步IO.事件驱动等字眼.首先要明确的是node真的是单线程的吗,如果是单线程的,那么异步IO,以及定时事件(setTimeout.setInterval等)又 ...