tp5框架内使用tp3.2分页的方法分析


Posted in PHP onMay 05, 2019

本文实例讲述了tp5框架内使用tp3.2分页的方法。分享给大家供大家参考,具体如下:

tp5内使用tp3.2分页

由于百度上面太多坑,所以自己拿来去改了一下

下面是完全可行的操作

tp5框架内使用tp3.2分页的方法分析

首先吧tp3.2的分页复制出来,拿到tp5 extend文件夹下面的org里面,把tp3.2的分页名称改为Page.php

然后改一下里面的代码

下面是改过后的代码

<?php
namespace org;//命名规范
class Page{
  public $firstRow; // 起始行数
  public $listRows; // 列表每页显示行数
  public $parameter; // 分页跳转时要带的参数
  public $totalRows; // 总行数
  public $totalPages; // 分页总页面数
  public $rollPage  = 7;// 分页栏每页显示的页数
  public $lastSuffix = false; // 最后一页是否显示总页数
  private $p    = 'p'; //分页参数名
  private $url   = ''; //当前链接URL
  private $nowPage = 1;
  // 分页显示定制
  private $config = array(
    'header' => '<span class="rows">共 %TOTAL_ROW% 条记录</span>',
    'prev'  => '<<',
    'next'  => '>>',
    'first' => '1...',
    'last'  => '...%TOTAL_PAGE%',
    'theme' => '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%',
  );
  /**
   * 架构函数
   * @param array $totalRows 总的记录数
   * @param array $listRows 每页显示记录数
   * @param array $parameter 分页跳转的参数
   */
  public function __construct($totalRows, $listRows=20, $parameter = array()) {
    config('var_page') && $this->p = config('var_page'); //设置分页参数名称
    /* 基础设置 */
    $this->totalRows = $totalRows; //设置总记录数
    $this->listRows  = $listRows; //设置每页显示行数
    $this->parameter = empty($parameter) ? input('param.'):$parameter;//因为tp5无法直接获取到$_GET,所以这里直接拿tp5的函数input('param.'),下面的一样
    $this->nowPage  = empty(input('param.p')) ? 1 : intval(input('param.p'));
    $this->nowPage  = $this->nowPage>0 ? $this->nowPage : 1;
    $this->firstRow  = $this->listRows * ($this->nowPage - 1);
  }
  /**
   * 定制分页链接设置
   * @param string $name 设置名称
   * @param string $value 设置值
   */
  public function setConfig($name,$value) {
    if(isset($this->config[$name])) {
      $this->config[$name] = $value;
    }
  }
  /**
   * 生成链接URL
   * @param integer $page 页码
   * @return string
   */
  private function url($page){
    $ispage = str_replace(urlencode('[PAGE]'), $page, $this->url);
    return $ispage;
  }
  /**
   * 组装分页链接
   * @return string
   */
  public function show() {
    if(0 == $this->totalRows) return '';
    /* 生成URL */
    $this->parameter[$this->p] = '[PAGE]';
    $this->url = url(request()->action(), $this->parameter);//生成url改成tp5获取当前action的
    /* 计算分页信息 */
    $this->totalPages = ceil($this->totalRows / $this->listRows); //总页数
    if(!empty($this->totalPages) && $this->nowPage > $this->totalPages) {
      $this->nowPage = $this->totalPages;
    }
    /* 计算分页临时变量 */
    $now_cool_page   = $this->rollPage/2;
    $now_cool_page_ceil = ceil($now_cool_page);
    $this->lastSuffix && $this->config['last'] = $this->totalPages;
    //上一页
    $up_row = $this->nowPage - 1;
    $up_page = $up_row > 0 ? '<a class="prev" href="' . $this->url($up_row) . '" rel="external nofollow" >' . $this->config['prev'] . '</a>' : '';
    //下一页
    $down_row = $this->nowPage + 1;
    $down_page = ($down_row <= $this->totalPages) ? '<a class="next" href="' . $this->url($down_row) . '" rel="external nofollow" >' . $this->config['next'] . '</a>' : '';
    //第一页
    $the_first = '';
    if($this->totalPages > $this->rollPage && ($this->nowPage - $now_cool_page) >= 1){
      $the_first = '<a class="first" href="' . $this->url(1) . '" rel="external nofollow" >' . $this->config['first'] . '</a>';
    }
    //最后一页
    $the_end = '';
    if($this->totalPages > $this->rollPage && ($this->nowPage + $now_cool_page) < $this->totalPages){
      $the_end = '<a class="end" href="' . $this->url($this->totalPages) . '" rel="external nofollow" >' . $this->config['last'] . '</a>';
    }
    //数字连接
    $link_page = "";
    for($i = 1; $i <= $this->rollPage; $i++){
      if(($this->nowPage - $now_cool_page) <= 0 ){
        $page = $i;
      }elseif(($this->nowPage + $now_cool_page - 1) >= $this->totalPages){
        $page = $this->totalPages - $this->rollPage + $i;
      }else{
        $page = $this->nowPage - $now_cool_page_ceil + $i;
      }
      if($page > 0 && $page != $this->nowPage){
        if($page <= $this->totalPages){
          $link_page .= '<a class="num" href="' . $this->url($page) . '" rel="external nofollow" >' . $page . '</a>';
        }else{
          break;
        }
      }else{
        if($page > 0 && $this->totalPages != 1){
          $link_page .= '<span class="current">' . $page . '</span>';
        }
      }
    }
    //替换分页内容
    $page_str = str_replace(
      array('%HEADER%', '%NOW_PAGE%', '%UP_PAGE%', '%DOWN_PAGE%', '%FIRST%', '%LINK_PAGE%', '%END%', '%TOTAL_ROW%', '%TOTAL_PAGE%'),
      array($this->config['header'], $this->nowPage, $up_page, $down_page, $the_first, $link_page, $the_end, $this->totalRows, $this->totalPages),
      $this->config['theme']);
    return "<div>{$page_str}</div>";
  }
}

接着是获取数据的代码

首先要use

tp5框架内使用tp3.2分页的方法分析

然后就可以直接根据tp3那样写了

tp5框架内使用tp3.2分页的方法分析

样式完全可以自定义

tp5框架内使用tp3.2分页的方法分析

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
用php实现像JSP,ASP里Application那样的全局变量
Jan 12 PHP
php 向访客和爬虫显示不同的内容
Nov 09 PHP
PHP垃圾回收机制简单说明
Jul 22 PHP
php递归创建和删除文件夹的代码小结
Apr 13 PHP
探讨捕获php错误信息方法的详解
Jun 09 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
Mar 19 PHP
Yii中表单用法实例详解
Jan 05 PHP
深入解析PHP的Laravel框架中的event事件操作
Mar 21 PHP
PHP之十六个魔术方法详细介绍
Nov 01 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 18 PHP
php + ajax 实现的写入数据库操作简单示例
May 16 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
May 05 #PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
May 05 #PHP
php实现的顺序线性表示例
May 04 #PHP
TP5.0框架实现无限极回复功能的方法分析
May 04 #PHP
PHP7 mongoDB扩展使用的方法分享
May 02 #PHP
PHP超低内存遍历目录文件和读取超大文件的方法
May 01 #PHP
Yii框架学习笔记之session与cookie简单操作示例
Apr 30 #PHP
You might like
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
js变换显示图片的实例
2013/04/16 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
node.js中TCP Socket多进程间的消息推送示例详解
2018/07/10 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
2018/10/30 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
python使用arcpy.mapping模块批量出图
2017/03/06 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
python实现网站微信登录的示例代码
2019/09/18 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
如何基于python实现脚本加密
2019/12/28 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
教师试用期自我鉴定
2014/02/12 职场文书
英语教育专业自荐信
2014/05/29 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
会计工作能力自我评价
2015/03/05 职场文书
学生检讨书怎么写
2015/05/07 职场文书
爱国主义教育主题班会
2015/08/13 职场文书