thinkPHP框架可添加js事件的分页类customPage.class.php完整实例


Posted in PHP onMarch 16, 2017

本文实例讲述了thinkPHP框架可添加js事件的分页类customPage.class.php。分享给大家供大家参考,具体如下:

用于ajax动态加载数据的分页类,分页事件可以动态添加,去除了a链接中的href地址。

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------
namespace Think;
class customPage{
  public $firstRow; // 起始行数
  public $listRows; // 列表每页显示行数
  public $parameter; // 分页跳转时要带的参数
  public $totalRows; // 总行数
  public $totalPages; // 分页总页面数
  public $rollPage  = 6;// 分页栏每页显示的页数
  public $lastSuffix = true; // 最后一页是否显示总页数
  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()) {
    C('VAR_PAGE') && $this->p = C('VAR_PAGE'); //设置分页参数名称
    /* 基础设置 */
    $this->totalRows = $totalRows; //设置总记录数
    $this->listRows  = $listRows; //设置每页显示行数
    $this->parameter = empty($parameter) ? $_GET : $parameter;
    $this->nowPage  = empty($_GET[$this->p]) ? 1 : intval($_GET[$this->p]);
    $this->totalPages = ceil($this->totalRows / $this->listRows); //总页数
    if ($this->nowPage>$this->totalPages) {
      $this->nowPage = $this->totalPages ;
    }
    $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){
    return str_replace(urlencode('[PAGE]'), $page, $this->url);
  }
  /**
   * 组装分页链接
   * @return string
   */
  public function show() {
    if(0 == $this->totalRows) return '';
    /* 生成URL */
    $this->parameter[$this->p] = '[PAGE]';
    $this->url = U(ACTION_NAME, $this->parameter);
    /* 计算分页信息 */
    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="shang" id="'.$up_row.'"href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >上一页</a>' : '';
    //下一页
    $down_row = $this->nowPage + 1;
    $down_page = ($down_row <= $this->totalPages) ? '<a class="xia" id="'.$down_row.'" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >下一页</a>' : '';
    //第一页
    $the_first = '';
    if($this->totalPages > $this->rollPage && ($this->nowPage - $now_cool_page) >= 1){
      $the_first = '<a class="first" id="1" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >第一页</a>';
    }
    //最后一页
    $the_end = '';
    //if($this->totalPages > $this->rollPage && ($this->nowPage + $now_cool_page) < $this->totalPages){
    if($this->totalPages > $this->rollPage && ($this->nowPage + $now_cool_page) < $this->totalPages){
      $the_end = '<a class="end" id="'.$this->totalRows.'" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >最后一页</a>';
    }
    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 .= ('<li id="'.$page.'">'.$page.'</li>');
          }else{
            break;
          }
        }else{
          if($page > 0 && $this->totalPages != 1){
            $link_page .= ('<li id="now" id="'.$page.'" class="current">'.$page.'</li>');
          }
        }
    }
    if (!empty($link_page)) $link_page = '<ul id="list">'.$link_page.'</ul>';
    //替换分页内容
    $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']);
    $page_str = trim($page_str);
    if(!empty($page_str)) $page_str .= '<p></p><input value="" type="text"><a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" id="go" class="go">跳转</a>';
    return $page_str;
  }
}

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

PHP 相关文章推荐
PHP自动更新新闻DIY
Oct 09 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
May 31 PHP
Codeigniter整合Tank Auth权限类库详解
Jun 12 PHP
php面向对象中static静态属性与方法的内存位置分析
Feb 08 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
Mar 19 PHP
PHP统一页面编码避免乱码问题
Apr 09 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
PHP常见的6个错误提示及解决方法
Jul 07 PHP
Laravel搭建后台登录系统步骤详解
Jul 26 PHP
php基于数组函数实现关联表的编辑操作示例
Jul 04 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
Aug 19 PHP
Laravel框架源码解析之入口文件原理分析
May 14 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 #PHP
Yii1.1中通过Sql查询进行的分页操作方法
Mar 16 #PHP
php生成无限栏目树
Mar 16 #PHP
CodeIgniter框架常见用法工作总结
Mar 16 #PHP
PHP常用算法和数据结构示例(必看篇)
Mar 15 #PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
Mar 15 #PHP
wordpress网站转移到本地运行测试的方法
Mar 15 #PHP
You might like
PHP 开源框架22个简单简介
2009/08/24 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
yii,CI,yaf框架+smarty模板使用方法
2015/12/29 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
layui select动态添加option的实例
2018/03/07 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
2018/10/19 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
python实现类的静态变量用法实例
2015/05/08 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
触电现场处置方案
2014/05/14 职场文书
户外活动总结
2015/02/04 职场文书
nginx服务器的下载安装与使用详解
2021/08/02 Servers
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android