thinkPHP5框架分页样式类完整示例


Posted in PHP onSeptember 01, 2018

本文实例讲述了thinkPHP5分页样式类。分享给大家供大家参考,具体如下:

在配置文件中改路径

把这段代码放入extend文件下 可以在这个文件下创建个page文件

在分页的控制器方法中

->paginate(12,false,[ 'type'=> 'page\Page','var_page'=>'page']);
<?php
namespace page;
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2017 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: zhangyajun <448901948@qq.com>
// +----------------------------------------------------------------------
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;
        border:1px #cccccc solid;
        background:#fff;
        text-decoration:none;
        color:#808080;
        font-size:12px;
        line-height:24px;
      }
      .pagination a:hover{
        color:#009688;
        background: white;
        border:1px #009688 solid;
      }
      .pagination a.cur{
        border:none;
        background:#009688;
        color:#fff;
      }
      .pagination p{
        float:left;
        padding:2px 12px;
        font-size:12px;
        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>';
  }
}

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

PHP 相关文章推荐
PHP查询MySQL大量数据的时候内存占用分析
Jul 22 PHP
php eval函数一句话木马代码
May 21 PHP
PHP使用CURL模拟登录的方法
Jul 08 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
Jun 13 PHP
Yii框架连接mongodb数据库的代码
Jul 27 PHP
中高级PHP程序员应该掌握哪些技术?
Sep 23 PHP
PHP实现数据四舍五入的方法小结【4种方法】
Mar 27 PHP
Yii框架分页技术实例分析
Aug 30 PHP
在PHP中实现使用Guzzle执行POST和GET请求
Oct 15 PHP
Yii Framework框架开发微信公众平台示例
Apr 26 PHP
php操作mongodb封装类与用法实例
Sep 01 #PHP
thinkphp集成前端脚手架Vue-cli的教程图解
Aug 30 #PHP
Django中通过定时任务触发页面静态化的处理方式
Aug 29 #PHP
PHP使用SMTP邮件服务器发送邮件示例
Aug 28 #PHP
PHP实现websocket通信的方法示例
Aug 28 #PHP
Yii2压缩PHP中模板代码的输出问题
Aug 28 #PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 #PHP
You might like
ThinkPHP缓存方法S()概述
2014/06/13 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
PHP判断密码强度的方法详解
2017/05/26 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
2017/10/23 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
2015/02/26 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
2017/03/06 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
Python中获取网页状态码的两个方法
2014/11/03 Python
Python生成不重复随机值的方法
2015/05/11 Python
python修改操作系统时间的方法
2015/05/18 Python
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
简单谈谈python的反射机制
2016/06/28 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
python scipy卷积运算的实现方法
2019/09/16 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
Python+OpenCV图像处理—— 色彩空间转换
2020/10/22 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
幼师自荐信范文
2013/10/06 职场文书
火车的故事教学反思
2014/02/11 职场文书
天网工程实施方案
2014/03/26 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
关于学习的演讲稿
2014/05/10 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
运动会报道稿大全
2015/07/23 职场文书
党风廉政承诺书2016
2016/03/25 职场文书