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公用函数列表[正则]
Feb 22 PHP
用PHP实现的生成静态HTML速度快类库
Mar 31 PHP
Php 构造函数construct的前下划线是双的_
Dec 08 PHP
php 中英文语言转换类代码
Aug 11 PHP
PHP实现的json类实例
Jul 28 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
PHP session会话操作技巧小结
Sep 27 PHP
PHP检测数据类型的几种方法(总结)
Mar 04 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
php对微信支付回调处理的方法
Aug 23 PHP
laravel框架模型、视图与控制器简单操作示例
Oct 10 PHP
浅谈如何提高PHP代码质量之单元测试
May 28 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
php在线打包程序源码
2008/07/27 PHP
php 8小时时间差的解决方法小结
2009/12/22 PHP
微博短链接算法php版本实现代码
2012/09/15 PHP
PHP实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
php实现删除空目录的方法
2015/03/16 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
JavaScript使用Math.random()生成简单的验证码
2019/01/21 Javascript
Python统计单词出现的次数
2018/04/04 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
python中eval与int的区别浅析
2019/08/11 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
python默认参数调用方法解析
2020/02/09 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
Python虚拟环境库virtualenvwrapper安装及使用
2020/06/17 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
函授毕业自我鉴定
2013/12/19 职场文书
听课评语大全
2014/04/30 职场文书
安全教育月活动总结
2014/05/05 职场文书
电台编导求职信
2014/05/06 职场文书
nginx里的rewrite跳转的实现
2021/03/31 Servers
python使用pygame创建精灵Sprite
2021/04/06 Python
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript