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中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
IIS7.X配置PHP运行环境小结
Jun 09 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
php读取EXCEL文件 php excelreader读取excel文件
Dec 06 PHP
PHP数组传递是值传递而非引用传递概念纠正
Jan 31 PHP
php 判断数组是几维数组
Mar 20 PHP
destoon整合UCenter图文教程
Jun 21 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
Jul 02 PHP
PHP7新特性foreach 修改示例介绍
Aug 26 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
Thinkphp开发--集成极光推送
Sep 15 PHP
PHP下载大文件失败并限制下载速度的实例代码
May 10 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如何解决网站大流量与高并发的问题
2011/06/25 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
小谈php正则提取图片地址
2014/03/27 PHP
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
python如何实现int函数的方法示例
2018/02/19 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
python读写csv文件方法详细总结
2019/07/05 Python
python中xlrd模块的使用详解
2021/02/01 Python
CSS3的颜色渐变效果的示例代码
2017/09/29 HTML / CSS
生产厂厂长岗位职责
2013/12/25 职场文书
2014年创卫工作总结
2014/11/24 职场文书
出纳试用期工作总结2015
2015/05/28 职场文书
《司马光》教学反思
2016/02/22 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python
Python实现抖音热搜定时爬取功能
2022/03/16 Python
Python字符串常规操作小结
2022/04/03 Python
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android