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+Html+缓存
Nov 25 PHP
php操作sqlserver关于时间日期读取的小小见解
Nov 29 PHP
php的大小写敏感问题整理
Dec 29 PHP
PHP与MYSQL中UTF8 中文排序示例代码
Oct 23 PHP
帝国CMS留言板回复后发送EMAIL通知客户
Jul 06 PHP
详解php比较操作符的安全问题
Dec 03 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 PHP
设定php简写功能的方法
Nov 28 PHP
php回调函数处理数组操作示例
Apr 13 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
Nov 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
Array of country list in PHP with Zend Framework
2011/10/17 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
javascript 新浪背投广告实现代码
2009/07/07 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
基于vue.js实现购物车
2020/01/15 Javascript
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
Python排序搜索基本算法之选择排序实例分析
2017/12/09 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
自荐信的禁忌和要点
2013/10/15 职场文书
大学生自荐信
2013/12/11 职场文书
大学生军训广播稿
2014/01/24 职场文书
妇产医师自荐信
2014/01/29 职场文书
公司应聘求职信
2014/06/21 职场文书
公司回复函格式
2015/07/14 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js