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中的MVC模式运用技巧
May 03 PHP
Wordpress php 分页代码
Oct 21 PHP
Thinkphp中数据按分类嵌套循环实现方法
Oct 30 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
May 13 PHP
PHP生成plist数据的方法
Jun 16 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
php车辆违章查询数据示例
Oct 14 PHP
thinkPHP5实现的查询数据库并返回json数据实例
Oct 23 PHP
PHP中创建和编辑Excel表格的方法
Sep 13 PHP
PHP合并两个或多个数组的方法
Jan 20 PHP
PHP中“=&gt;
Mar 01 PHP
PHP匿名函数(闭包函数)详解
Mar 22 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
上海无线电三厂简史修改版
2021/03/01 无线电
上传多个文件的PHP脚本
2006/11/26 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
php执行多个存储过程的方法【基于thinkPHP】
2016/11/08 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
原生js结合html5制作简易的双色子游戏
2015/03/30 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
如何写好你的JavaScript【推荐】
2017/03/02 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
python pycharm的安装及其使用
2019/10/11 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
小学生自我评价范例
2013/09/24 职场文书
工作的心得体会
2013/12/31 职场文书
大学学雷锋活动总结
2014/06/26 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
pandas中对文本类型数据的处理小结
2021/11/01 Python