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之变量、常量学习笔记
Mar 27 PHP
php 代码优化的42条建议 推荐
Sep 25 PHP
php 无法加载mcrypt.dll的解决办法
Apr 03 PHP
php5.3 注意事项说明
Jul 01 PHP
php文件服务实现虚拟挂载其他目录示例
Apr 17 PHP
CI框架开发新浪微博登录接口源码完整版
May 28 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
Sep 21 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
PHP给前端返回一个JSON对象的实例讲解
May 31 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
Jun 14 PHP
Laravel创建数据库表结构的例子
Oct 09 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/04/28 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
浅谈php扩展imagick
2014/06/02 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
php递归函数怎么用才有效
2018/02/24 PHP
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
Python常用列表数据结构小结
2014/08/06 Python
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
python实现一次创建多级目录的方法
2015/05/15 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
Form表单及django的form表单的补充
2019/07/25 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
Python 实现向word(docx)中输出
2020/02/13 Python
Python pandas如何向excel添加数据
2020/05/22 Python
python实现canny边缘检测
2020/09/14 Python
JAKO-O德国野酷台湾站:德国首屈一指的婴幼童用品品牌
2019/01/14 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
同学聚会主持词
2014/03/18 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
教师个人师德总结
2015/02/06 职场文书
公诉意见书范文
2015/06/05 职场文书
python如何获取网络数据
2021/04/11 Python