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中$_SERVER的详细参数与说明
Jul 29 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
Jun 18 PHP
ThinkPHP连接数据库及主从数据库的设置教程
Aug 22 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
php自动识别文字编码并转换为目标编码的方法
Aug 08 PHP
Yii实现Command任务处理的方法详解
Jul 14 PHP
Yii框架连接mongodb数据库的代码
Jul 27 PHP
magento后台无法登录解决办法的两种方法
Dec 09 PHP
thinkPHP5实现数据库添加内容的方法
Oct 25 PHP
PHP实现获取url地址中顶级域名的方法示例
Jun 05 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
oracle资料库函式库
2006/10/09 PHP
几个学习PHP的网址
2006/11/25 PHP
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
php 函数使用方法与函数定义方法
2010/05/09 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
浅谈Python中带_的变量或函数命名
2017/12/04 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
如何写python的配置文件
2020/06/07 Python
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
公司年夜饭通知
2015/04/25 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
比赛主持人开场白
2015/05/29 职场文书
请客吃饭开场白
2015/06/01 职场文书
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis