分页Model
<?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的更多相关文章
- 通用分页model封装pageList
package selfimpr.page; import java.util.List; /** * 分页模型 * @param <T> 数据泛型 * @author selfimpr ...
- yii中sphinx,Ajax搜索分页
效果图: 控制器: <?phpnamespace backend\controllers; use Yii;use yii\web\Controller;use yii\data\Paginat ...
- [drp 5] pageModel的建立,实现分页查询
导读:之前做的分页,一直都是用的easy--UI分页,然后没有系统的整理过,就是知道传几个参数,然后云云.这次,从头到尾总结一下,了了我的这桩心愿.人事系统的重定向工作,一直刺激着我一定要总结总结这个 ...
- [读书心得]资料分页的优化,以SQL 2012的 OFFSET-FETCH为例
这是我的文章备份,原始出处:[读书心得]资料分页的优化,以SQL 2012的 OFFSET-FETCH为例 http://www.dotblogs.com.tw/mis2000lab/archive/ ...
- ASP.NET MVC 之表格分页
简单效果图:(框架:MVC+NHibernate) 要点: (1)首先建立表格分页Model(GridModel.cs) (2)然后建立数据展示页(PageCloth.cshtml) (3)再建分页版 ...
- ASP.NET MVC 分页
概述:数据比较多的时候,常使用分页.这里使用bootpag.js和PagedList这两个插件实现. 准备JS的引用 1.这个是bootstrap 中pagination的库 2..NET后台ToPa ...
- MyBatis实现拦截器分页功能
1.原理 在mybatis使用拦截器(interceptor),截获所执行方法的sql语句与参数. (1)修改sql的查询结果:将原sql改为查询count(*) 也就是条数 (2)将语句sql进行拼 ...
- 架构 Roadmap 笔记分享
虽然我们的架构不是开源的,不过一些笔记可以愿意公开和大家讨论一下,我相信不少人在和我们干着同样的事情,那不如一块儿交流一下,这样我们可以更快. 这里前端,后端都有,前端我们用的是 avalon js, ...
- 与你相遇好幸运,Waterline的属性
>支持的数据类型: string / text / integer / float / date / time / datetime / boolean / binary / array / j ...
随机推荐
- 本地部署Easy Mock
最近在自己捣腾个vue的项目,苦于没有接口测试.网上搜寻一遍,基本上是使用mock.js模拟数据.研究mock.js 过程中,发现很多人提到了Easy Mock,发现它更加的方便.但是访问Eash M ...
- 第4章 Spring的数据库开发
4.1 Spring JDBC Spring的JDBC模块负责数据库资源管理和错误处理,化简了开发者对数据库的操作. 4.11 Spring JdbcTemplate的解析 * JdbcTemplat ...
- Nginx 基本入门
什么是Nginx? 根据前面的对比,我们可以了解到Nginx是一个http服务器.是一个使用c语言开发的高性能的http服务器及反向代理服务器.Nginx是一款高性能的http 服务器/反向代理服务器 ...
- 洛谷p2330繁忙的都市题解
题面 根据题意来分析, 要求出你选了几条路, 最小生成树是能解的, 那么就直接输出n - 1条路即可, 至于最大值则走一遍最小生成树求出即可 这里提供最小生成树的两种方法 1. 克鲁斯卡尔 克鲁斯卡尔 ...
- 洛谷 P2356 【弹珠游戏】题解
自我感觉应该没有用结构体做的吧 这道题其实非常水 很适合初学贪心的同学做一下 我好像没有用贪心做,嘻嘻 首先先读题, 题目中说这个游戏只能消灭当前所在位置的行.列的敌人 首先特判一下: if(tt== ...
- 洛谷 P5408 【模板】第一类斯特林数·行
传送门 首先,有 \[ x^{\overline n}=\sum_k\begin{bmatrix}{n\\ k}\end{bmatrix}x^{k}\\ \] 那么我们只需要求出\(x^{\overl ...
- 面试题必备-web页面基础
html标签是由<>包围的关键词 html标签是成对出现的 有部分标签是没有结束标签的,叫单标签, 页面中所有的内容,都是要放在HTML标签中的 HTML标签分三部分: 标签名称 标签内容 ...
- K8s configMap原理介绍
给容器内应用程序传递参数的实现方式: 1. 将配置文件直接打包到镜像中,但这种方式不推荐使用,因为修改配置不够灵活. 2. 通过定义Pod清单时,指定自定义命令行参数,即设定 args:[" ...
- 利用iptables做端口转发
需求背景: A与C不在同一网段无法直接访问,而A和B,C和B可以互通.现需要A借助B访问C的3306端口. 解决方案: 利用iptables配置规则,实现端口转发. 具体操作: 在B上开启端口转发功能 ...
- java实现开根号的运算
面试的时候,偶然被问到,开根号的实现,虽然给面试官讲解了思路,但是没有实际实现过,今天闲来无事,就把自己的思路写一下,做个笔记. 如果某个数字正好可以开根号为2个整数,例如1,4,9等,那就很简单了. ...