<?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. A*G#C001

    AGC001 A BBQ Easy 贪心. https://agc001.contest.atcoder.jp/submissions/7856034 B Mysterious Light 很nb这个 ...

  2. python pycryptodome 加密解密

    pip3 install pycryptodome my_private_rsa_key.bin -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDlOJu ...

  3. 如果要对一些数据做处理,可以直接用自定义fliter

    {{[offer.brand, offer.series, offer.model] | carFilter}} filters里面写 carFilter ([brand, series, model ...

  4. mysql数据库数据入库时间跟当前时间差了8个小时

    vim /etc/my.cnf[mysqld]default-time_zone = '+8:00'重启mysql服务./etc/init.d/mysqld restart 未测试

  5. [Beta]Scrum Meeting#10

    github 本次会议项目由PM召开,时间为5月15日晚上10点30分 时长15分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客整理文档 撰写博客整理文档 swoip 为适应新功能调整布局前 ...

  6. Java编程思想之三 操作符

    在底层,Java中的数据是通过使用操作符来操作的. 3.2 使用Java操作符 操作符接收一个或多个参数,并生成一个新值. 操作符作用于操作数,生成一个新值.有些操作符可能会改变操作数自身的值,这被称 ...

  7. tinylib

    tinylib.h /* -------------------------------------------------------------------------------- oooo ` ...

  8. 使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明【转】

    原文链接:https://blog.csdn.net/Donjuan/article/details/3865026在网上看到很多网友在.NET程序中调用Win32 API,或者调用自己的VC DLL ...

  9. Mysql:设置主键自动增长起始值

    比较郁闷昨天在家使用‘alter table `tablename` AUTO_INCREMENT=10000;’怎么也不起效,但是今天下班时间公司一同事尝试了一下就可以了.搞不明白自己当时是怎么操作 ...

  10. wx.request 请求与django

    wx.request 1.wx.request相当于ajax请求,和django后台进行交互 官方文档:https://developers.weixin.qq.com/miniprogram/dev ...