TP5框架实现自定义分页样式的方法示例


Posted in PHP onApril 05, 2020

本文实例讲述了TP5框架实现自定义分页样式的方法。分享给大家供大家参考,具体如下:

1. 在extend\目录下创建page目录,在page目录下创建Page.php文件,将以下代码放入文件中。

<?php
namespace page;
use think\Paginator;
class Page extends Paginator
{
 
  //首页
  protected function home() {
    if ($this->currentPage() > 1) {
      return "<a href='" . $this->url(1) . "' title='首页'>首页</a>";
    } else {
      return "<p>首页</p>";
    }
  }
 
  //上一页
  protected function prev() {
    if ($this->currentPage() > 1) {
      return "<a href='" . $this->url($this->currentPage - 1) . "' title='上一页'>上一页</a>";
    } else {
      return "<p>上一页</p>";
    }
  }
 
  //下一页
  protected function next() {
    if ($this->hasMore) {
      return "<a href='" . $this->url($this->currentPage + 1) . "' title='下一页'>下一页</a>";
    } else {
      return"<p>下一页</p>";
    }
  }
 
  //尾页
  protected function last() {
    if ($this->hasMore) {
      return "<a href='" . $this->url($this->lastPage) . "' title='尾页'>尾页</a>";
    } else {
      return "<p>尾页</p>";
    }
  }
 
  //统计信息
  protected function info(){
    return "<p class='pageRemark'>共<b>" . $this->lastPage .
      "</b>页<b>" . $this->total . "</b>条数据</p>";
  }
 
  /**
   * 页码按钮
   * @return string
   */
  protected function getLinks()
  {
 
    $block = [
      'first' => null,
      'slider' => null,
      'last'  => null
    ];
 
    $side  = 3;
    $window = $side * 2;
 
    if ($this->lastPage < $window + 6) {
      $block['first'] = $this->getUrlRange(1, $this->lastPage);
    } elseif ($this->currentPage <= $window) {
      $block['first'] = $this->getUrlRange(1, $window + 2);
      $block['last'] = $this->getUrlRange($this->lastPage - 1, $this->lastPage);
    } elseif ($this->currentPage > ($this->lastPage - $window)) {
      $block['first'] = $this->getUrlRange(1, 2);
      $block['last'] = $this->getUrlRange($this->lastPage - ($window + 2), $this->lastPage);
    } else {
      $block['first'] = $this->getUrlRange(1, 2);
      $block['slider'] = $this->getUrlRange($this->currentPage - $side, $this->currentPage + $side);
      $block['last']  = $this->getUrlRange($this->lastPage - 1, $this->lastPage);
    }
 
    $html = '';
 
    if (is_array($block['first'])) {
      $html .= $this->getUrlLinks($block['first']);
    }
 
    if (is_array($block['slider'])) {
      $html .= $this->getDots();
      $html .= $this->getUrlLinks($block['slider']);
    }
 
    if (is_array($block['last'])) {
      $html .= $this->getDots();
      $html .= $this->getUrlLinks($block['last']);
    }
 
    return $html;
  }
 
  /**
   * 渲染分页html
   * @return mixed
   */
  public function render()
  {
    if ($this->hasPages()) {
      if ($this->simple) {
        return sprintf(
          '%s<div class="pagination">%s %s %s</div>',
          $this->css(),
          $this->prev(),
          $this->getLinks(),
          $this->next()
        );
      } else {
        return sprintf(
          '%s<div class="pagination">%s %s %s %s %s %s</div>',
          $this->css(),
          $this->home(),
          $this->prev(),
          $this->getLinks(),
          $this->next(),
          $this->last(),
          $this->info()
        );
      }
    }
  }
 
  /**
   * 生成一个可点击的按钮
   *
   * @param string $url
   * @param int  $page
   * @return string
   */
  protected function getAvailablePageWrapper($url, $page)
  {
    return '<a href="' . htmlentities($url) . '" rel="external nofollow" title="第"'. $page .'"页" >' . $page . '</a>';
  }
 
  /**
   * 生成一个禁用的按钮
   *
   * @param string $text
   * @return string
   */
  protected function getDisabledTextWrapper($text)
  {
    return '<p class="pageEllipsis">' . $text . '</p>';
  }
 
  /**
   * 生成一个激活的按钮
   *
   * @param string $text
   * @return string
   */
  protected function getActivePageWrapper($text)
  {
    return '<a href="" class=" rel="external nofollow" cur">' . $text . '</a>';
  }
 
  /**
   * 生成省略号按钮
   *
   * @return string
   */
  protected function getDots()
  {
    return $this->getDisabledTextWrapper('...');
  }
 
  /**
   * 批量生成页码按钮.
   *
   * @param array $urls
   * @return string
   */
  protected function getUrlLinks(array $urls)
  {
    $html = '';
 
    foreach ($urls as $page => $url) {
      $html .= $this->getPageLinkWrapper($url, $page);
    }
 
    return $html;
  }
 
  /**
   * 生成普通页码按钮
   *
   * @param string $url
   * @param int  $page
   * @return string
   */
  protected function getPageLinkWrapper($url, $page)
  {
    if ($page == $this->currentPage()) {
      return $this->getActivePageWrapper($page);
    }
 
    return $this->getAvailablePageWrapper($url, $page);
  }
 
  /**
   * 分页样式
   */
  protected function css(){
    return ' <style type="text/css">
      .pagination p{
        margin:0;
        cursor:pointer
      }
      .pagination{
        height:40px;
        padding:20px 0px;
      }
      .pagination a{
        display:block;
        float:left;
        margin-right:10px;
        padding:2px 12px;
        height:24px;
        border:1px #cccccc solid;
        background:#fff;
        text-decoration:none;
        color:#808080;
        font-size:12px;
        line-height:24px;
      }
      .pagination a:hover{
        color:#077ee3;
        background: white;
        border:1px #077ee3 solid;
      }
      .pagination a.cur{
        border:none;
        background:#077ee3;
        color:#fff;
      }
      .pagination p{
        float:left;
        padding:2px 12px;
        font-size:12px;
        height:24px;
        line-height:24px;
        color:#bbb;
        border:1px #ccc solid;
        background:#fcfcfc;
        margin-right:8px;
      }
      .pagination p.pageRemark{
        border-style:none;
        background:none;
        margin-right:0px;
        padding:4px 0px;
        color:#666;
      }
      .pagination p.pageRemark b{
        color:red;
      }
      .pagination p.pageEllipsis{
        border-style:none;
        background:none;
        padding:4px 0px;
        color:#808080;
      }
      .dates li {font-size: 14px;margin:20px 0}
      .dates li span{float:right}
    </style>';
  }
}

2. 修改  application\config.php  中的配置文件即可

//分页配置 
  'paginate'        => [ 
    'type'   => 'page\Page',//分页类 
    'var_page' => 'page', 
    'list_rows' => 15, 
  ],

3. 分页样式为 TP5框架实现自定义分页样式的方法示例

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

PHP 相关文章推荐
php 生成随机验证码图片代码
Feb 08 PHP
php数组一对一替换实现代码
Aug 31 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
PHP常用正则表达式集锦
Aug 17 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
Sep 28 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 19 PHP
如何通过Apache在本地配置多个虚拟主机
Jul 29 PHP
php并发加锁问题分析与设计代码实例讲解
Feb 26 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 #PHP
TP5框架实现签到功能的方法分析
Apr 05 #PHP
TP5框架页面跳转样式操作示例
Apr 05 #PHP
TP5框架实现的数据库备份功能示例
Apr 05 #PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 #PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 #PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 #PHP
You might like
php中批量替换文件名的实现代码
2011/07/20 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
javascript新手语法小结
2008/06/15 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
利用canvas实现的加载动画效果实例代码
2017/07/05 Javascript
深入理解ES7的async/await的用法
2017/09/09 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
vue.js实现简单购物车功能
2020/05/30 Javascript
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
Mac 上切换Python多版本
2017/06/17 Python
老生常谈Python startswith()函数与endswith函数
2017/09/08 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
pytorch forward两个参数实例
2020/01/17 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
python利用opencv保存、播放视频
2020/11/02 Python
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
电子商务应届生求职信
2013/11/16 职场文书
运动会四百米广播稿
2014/01/19 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技