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 相关文章推荐
其他功能
Oct 09 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
Aug 21 PHP
PHP反转字符串函数strrev()函数的用法
Feb 04 PHP
PHP基础教程(php入门基础教程)一些code代码
Jan 06 PHP
php合并js请求的例子
Nov 01 PHP
php session的锁和并发
Jan 22 PHP
PHP实现的统计数据功能详解
Dec 06 PHP
WAF的正确bypass
Jan 05 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
PHP 的Opcache加速的使用方法
Dec 29 PHP
PHP获取二叉树镜像的方法
Jan 17 PHP
PHP判断函数是否被定义的方法
Jun 21 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
php 学习资料零碎东西
2010/12/04 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
JavaScript效率调优经验
2009/06/04 Javascript
javascript encodeURI和encodeURIComponent的比较
2010/04/03 Javascript
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
jQuery源码分析之jQuery中的循环技巧详解
2014/09/06 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
js转换对象为xml
2017/02/17 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
详解Python 协程的详细用法使用和例子
2018/06/15 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
python3实现单目标粒子群算法
2019/11/14 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
abstract class和interface有什么区别?
2012/01/03 面试题
交通专业个人自荐信格式
2013/09/23 职场文书
专营店会计助理岗位职责
2013/11/29 职场文书
教学质量评估实施方案
2014/03/17 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书