分页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 ...
随机推荐
- PHP 判断时间段 至今过了多长时间
/** * * @param timestamp $time 输入时间 * @return str $str 输入时间与现在时间差的中文 */ function wordTime($time) { / ...
- drf常用方法
1.认证 2.权限 3.序列化 4.分页 5.限流
- 文件搜索命令(命令搜索)which、whereis
一.which命令: 搜索命令所在目录(绝对路径)或者别名信息. 用户可以使用的命令存放在: /bin /usr/bin 管理员使用的命令: /sbin /usr/sbin 1.带有别名的命令: 二. ...
- 小说美句摘抄&&动漫壁纸
不知道为啥脑子一抽打算开个坑(反正咱是个不务正业的人) 大部分是网文里的,某些是轻小说里的,文学名著--咱也不像会看那个的人啊-- upd 2019.11.6:把一些自己觉得好的动漫壁纸贴一贴,图床用 ...
- nginx 正向代理配置
需求场景:从以下俩张图可以比较直观的理解正向代理的作用(在其他文章中会表示为“http代理”,注意当前文档的配置不支持https代理) Nginx正向代理配置文件: server{ listen de ...
- [Gamma阶段]第一次Scrum Meeting
Scrum Meeting博客目录 [Gamma阶段]第一次Scrum Meeting 基本信息 名称 时间 地点 时长 第一次Scrum Meeting 19/05/27 大运村寝室6楼 60min ...
- [Beta]Scrum Meeting#4
github 本次会议项目由PM召开,时间为5月9日晚上10点30分 时长15分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客整理文档 撰写博客整理文档 swoip 改进界面 改进界面 bh ...
- 【MonkeyRunner】[技术博客]用python编写脚本查看设备信息
[MonkeyRunner]用python编写脚本查看设备信息 原以为是个简单的操作,在实践的时候发现了一些问题. python脚本 test.py: from com.android.monkeyr ...
- git 执行 git reset HEAD 报 Unstaged changes after reset
Unstaged changes after reset 解决的办法如下2中办法: 1. git add . git reset --hard 2. git stash git stash dro ...
- Android外接USB扫码枪
公司的设备以前接入的都是串口的扫码头,优点是直接通过串口读取流里面的数据就OK了,缺点是你需要知道每一款扫码器的型号以获取波特率及Android设备的串口地址.因为现在usb扫码器越来越方便且即插即用 ...