<?php
namespace Admin\Model; use Think\Model; <?php
class PageModel extends Model
{
/*
*此函数分页函数。传入表名和当前页,返回 总页数,总条数 底标的分页的数组
*/
public function index($tableName, $page, $where, $prefix_page, $sql = '', $add_one_flag = false)
{
$tables = M($tableName);
//第一返回总条数
if ($sql) {
$tmp = $tables->query($sql);
$data['count'] = $tmp[0]['count_num'];
} else {
if ($where) {
$data['count'] = $tables->where($where)->count();
} else {
$data['count'] = $tables->count();
}
}
if ($add_one_flag === true) {
$data['count'] += 1;
} $page_step = C('PAGE_NORMAL_COUNT');
//第二返回总页数
$data['page_all'] = (int) ceil($data['count'] / $page_step); //第三返回底标的分页数组
$page_start = $page - 2;
if ($data['page_all'] > 5) {
if ($page_start <= 0) {
$page_start = 1;
$page_end = 5;
} else {
$page_end = $page + 2;
if ($page_end >= $data['page_all']) {
$page_end = $data['page_all'];
$page_start = $page_end - 4;
}
}
} else {
$page_start = 1;
$page_end = $data['page_all'];
}
$data['page_start'] = $page_start;
$data['page_end'] = $page_end;
//第四返回当前页
$data['page'] = $page;
//第五 返回上一页和下一页
$prev_page = $page - 1;
if ($prev_page <= 0) {
$prev_page = 1;
}
$next_page = $page + 1;
if ($next_page >= $data['page_all']) {
$next_page = $data['page_all'];
} $data['prev_page'] = $prev_page;
$data['next_page'] = $next_page;
$data['prefix_page'] = $prefix_page; // 自动获取参数,避免分页丢失
$query_string = $_SERVER['QUERY_STRING'];
// setlog($query_string);
if ($query_string) {
if (strpos($query_string, 'page') === false) {
// setlog('111');
$data['tail'] = '&' . $query_string;
} else {
// setlog('222');
// 去掉page
$pos = strpos($query_string, '&');
if ($pos === false) {
$data['tail'] = '';
// setlog('333');
} else {
// setlog('444');
$my_query_string = substr($query_string, $pos);
$arr = explode('&',$my_query_string);
$new_query_string = '';
foreach($arr as $k => &$v) {
if (strpos($v, 'page') === false && $v) {
$new_query_string .= '&'.$v;
}
}
// setlog($new_query_string);
$data['tail'] = $new_query_string;
}
}
}
return $data;
}
}

php

$allPage = $model->index('room', $page, $where);
$this->assign('allPage', $allPage);

html

<div class="layui-card-body ">
<div class="page">
<div>
<a href="__ACTION__?page=1{$allPage['prefix_page']}{$allPage.tail}">首页</a>
<a class="prev" href="__ACTION__?page={$allPage['prev_page']}{$allPage['prefix_page']}{$allPage.tail}">上一页</a>
<php> for ($i = $allPage['page_start']; $i <= $allPage['page_end']; $i++) {
if ($i == $allPage['page']) { </php>
<span class="current">
<php> echo $i; </php>
</span>
<php> } else { </php>
<a class="num" href="__ACTION__?page=<php>echo $i;</php>{$allPage['prefix_page']}{$allPage.tail}">
<php> echo $i; </php>
</a>
<?php
}
}
?>
<a class="next" href="__ACTION__?page={$allPage['next_page']}{$allPage['prefix_page']}{$allPage.tail}">下一页</a>
<a href="__ACTION__?page={$allPage['page_all']}{$allPage['prefix_page']}{$allPage.tail}">尾页</a>
</div>
</div>
</div>

分页Model的更多相关文章

  1. 通用分页model封装pageList

    package selfimpr.page; import java.util.List; /** * 分页模型 * @param <T> 数据泛型 * @author selfimpr ...

  2. yii中sphinx,Ajax搜索分页

    效果图: 控制器: <?phpnamespace backend\controllers; use Yii;use yii\web\Controller;use yii\data\Paginat ...

  3. [drp 5] pageModel的建立,实现分页查询

    导读:之前做的分页,一直都是用的easy--UI分页,然后没有系统的整理过,就是知道传几个参数,然后云云.这次,从头到尾总结一下,了了我的这桩心愿.人事系统的重定向工作,一直刺激着我一定要总结总结这个 ...

  4. [读书心得]资料分页的优化,以SQL 2012的 OFFSET-FETCH为例

    这是我的文章备份,原始出处:[读书心得]资料分页的优化,以SQL 2012的 OFFSET-FETCH为例 http://www.dotblogs.com.tw/mis2000lab/archive/ ...

  5. ASP.NET MVC 之表格分页

    简单效果图:(框架:MVC+NHibernate) 要点: (1)首先建立表格分页Model(GridModel.cs) (2)然后建立数据展示页(PageCloth.cshtml) (3)再建分页版 ...

  6. ASP.NET MVC 分页

    概述:数据比较多的时候,常使用分页.这里使用bootpag.js和PagedList这两个插件实现. 准备JS的引用 1.这个是bootstrap 中pagination的库 2..NET后台ToPa ...

  7. MyBatis实现拦截器分页功能

    1.原理 在mybatis使用拦截器(interceptor),截获所执行方法的sql语句与参数. (1)修改sql的查询结果:将原sql改为查询count(*) 也就是条数 (2)将语句sql进行拼 ...

  8. 架构 Roadmap 笔记分享

    虽然我们的架构不是开源的,不过一些笔记可以愿意公开和大家讨论一下,我相信不少人在和我们干着同样的事情,那不如一块儿交流一下,这样我们可以更快. 这里前端,后端都有,前端我们用的是 avalon js, ...

  9. 与你相遇好幸运,Waterline的属性

    >支持的数据类型: string / text / integer / float / date / time / datetime / boolean / binary / array / j ...

随机推荐

  1. What is a Servlet?

    Servlet 工作原理解析 https://www.ibm.com/developerworks/cn/java/j-lo-servlet/index.html 你可以理解为,Spring MVC是 ...

  2. Spring核心模块解析

    Spring框架是一个轻量级的集成式开发框架,可以和任何一种框架集成在一起使用,可以说是一个大的全家桶.Spring从1.x发展到现在的5.x可以说是越来越强大,下面来看看Spring都包含哪些核心的 ...

  3. SQL Server Spool 假脱机

    SQL Server的Spool(假脱机)操作符,用于把前一个操作符处理的数据(又称作中间结果集)存储到一个隐藏的临时结构中,以便在执行过程中重用这些数据.这个临时结构都创建在tempdb中,通常的结 ...

  4. 使用blessed-contrib 开发专业的终端dashboard

    blessed-contrib 是blessed 的一个扩展包,以前有说过blessed(一个方便的开发cli 的工具) 我们使用blessed-contrib可以开发专业的终端dashboard 功 ...

  5. cloudevents 通用event 描述指南

    cloudevents 是由cncf 组织管理的一个通用event描述指南 特性: 一致性 可理解性 可移植性 说明 cloudevents 不仅提供了核心描述,同时也包含了不同协议的指南说明(htt ...

  6. shell习题训练

    shell习题训练 求2个数之和 计算1-100的和 将一目录下所有的文件的扩展名改为bak 编译当前目录下的所有.c文件: 打印root可以使用可执行文件数,处理结果: root's bins: 2 ...

  7. 假设检验总结以及如何用python进行假设检验(scipy)

    几种常见的假设检验总结如下: 假设检验名称 Z检验 t检验 χ2检验 F检验 原假设 H0: μ≥μ0        H0: μ≤μ0        H0: μ=μ0  (比较样本和总体均值)     ...

  8. [技术博客]利用第三方框架react-native-swipeout实现左右滑动出现按钮

    在之前的开发中,为了实现用户不同手势操作能够对应不同的功能,我们考虑使用React-Native的API--PanResponder,实现识别用户的手势,实现不同的功能.但我们很快就发现,这样简单的实 ...

  9. 【面向对象】第三单元总结——JML

    梳理JML语言的理论基础.应用工具链情况 JML语言理论基础 JML(Java Modeling Language)是一种行为规范接口语言,通过使用不会被编译的注释形式,和固定关键字的语法,指定Jav ...

  10. Netty 优雅退出

    Netty 优雅退出机制和原理:https://www.infoq.cn/article/netty-elegant-exit-mechanism-and-principles/?utm_source ...