<?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. 选择 IDE 的目的

    选择 IDE 的目的 这个不消多说了, 在我看来,最重要的无非三点: 自动补全 自定义模板(俗称 custom snippets) IDE 内 debug. 代码静态检查(错误提示,这里主要包括 es ...

  2. trait Monad:函数式编程类型系统本博客搜索关键字--类型升降

    trait Monad:函数式编程类型系统本博客搜索关键字--类型升降

  3. LeetCode 722. Remove Comments

    原题链接在这里:https://leetcode.com/problems/remove-comments/ 题目: Given a C++ program, remove comments from ...

  4. linux MySQL5.7 rpm安装(转)

    删除旧包: # rpm -qa | grep -i mysql # rpm -ev mysql-libs-* --nodeps 安装rpm包: # rpm -ivh mysql-community-c ...

  5. luogu_1156: 垃圾陷阱

    洛谷1156:垃圾陷阱 题目描述: 一头牛在一个井里,深度为\(D(1\leq D\leq100)\) 每过一段时间会往井里投掷一个物品,牛可以选择将其堆起来或者吃掉,吃掉可以增加生命值(生命值随时间 ...

  6. kuma kong 团队开发的可视化&&安全的service mesh

    最近service mesh 的开源产品是越来越多了,好多团队都开源了自己的解决方案 maesh 最近kong 团队也开源了自己的service meshkuma 一张参考图 说明 kuma 没有基于 ...

  7. JavaScript == 与 === 区别

    1.对于 string.number 等基础类型,== 和 === 是有区别的 a)不同类型间比较,== 之比较 "转化成同一类型后的值" 看 "值" 是否相等 ...

  8. 同余方程组(EXCRT)(luogu4777)

    #include<cstdio> #include<algorithm> #define ll long long using namespace std; ll k; ll ...

  9. 记录一次JVM配置优化的案例

    上周公司有一个应用,一到晚上高峰期的时候RT(响应时间)就很长.后来上服务器看了下JVM的配置,发现运维在启动参数那里把-Xss给设成了10M.导致每个线程占用的内存过大,导致内存消耗过快,其它线程排 ...

  10. IT项目经理都需要具备哪些能力

    发布时间:05-2009:24优质原创作者 项目经理是IT行业中比较常见的职位,工作职责主要包括三个方面,其一是资源整合任务:其二是沟通协调任务:其三是保障项目的时间周期. 资源整合能力是项目经理的重 ...