简单好用的PHP分页类

本文为大家分享了两段PHP分页类,很实用,供大家参考,具体内容如下

<?php
 class Page {
  private $total;   //总记录
  private $pagesize;  //每页显示多少条
  private $limit;   //limit
  private $page;   //当前页码
  private $pagenum;  //总页码
  private $url;   //地址
  private $bothnum;  //两边保持数字分页的量

  //构造方法初始化
  public function __construct($_total, $_pagesize) {
   $this->total = $_total ? $_total : 1;
   $this->pagesize = $_pagesize;
  $this->pagenum = ceil($this->total / $this->pagesize);
   $this->page = $this->setPage();
   $this->limit = "LIMIT ".($this->page-1)*$this->pagesize.",$this->pagesize";
   $this->url = $this->setUrl();
   $this->bothnum = 2;
  }

  //拦截器
  private function __get($_key) {
   return $this->$_key;
  }

  //获取当前页码
  private function setPage() {
   if (!empty($_GET['page'])) {
    if ($_GET['page'] > 0) {
     if ($_GET['page'] > $this->pagenum) {
      return $this->pagenum;
     } else {
      return $_GET['page'];
     }
    } else {
     return 1;
    }
   } else {
    return 1;
   }
  } 

  //获取地址
  private function setUrl() {
   $_url = $_SERVER["REQUEST_URI"];
   $_par = parse_url($_url);
   if (isset($_par['query'])) {
    parse_str($_par['query'],$_query);
    unset($_query['page']);
    $_url = $_par['path'].'?'.http_build_query($_query);
   }
   return $_url;
  }  //数字目录
  private function pageList() {
   for ($i=$this->bothnum;$i>=1;$i--) {
   $_page = $this->page-$i;
   if ($_page < 1) continue;
    $_pagelist .= ' <a href="'.$this->url.'&page='.$_page.'">'.$_page.'</a> ';
   }
   $_pagelist .= ' <span class="me">'.$this->page.'</span> ';
   for ($i=1;$i<=$this->bothnum;$i++) {
    $_page = $this->page+$i;
    if ($_page > $this->pagenum) break;
    $_pagelist .= ' <a href="'.$this->url.'&page='.$_page.'">'.$_page.'</a> ';
   }
   return $_pagelist;
  }

  //首页
  private function first() {
   if ($this->page > $this->bothnum+1) {
    return ' <a href="'.$this->url.'">1</a> ...';
   }
  }

  //上一页
  private function prev() {
   if ($this->page == 1) {
    return '<span class="disabled">上一页</span>';
   }
   return ' <a href="'.$this->url.'&page='.($this->page-1).'">上一页</a> ';
  }

  //下一页
  private function next() {
   if ($this->page == $this->pagenum) {
    return '<span class="disabled">下一页</span>';
   }
   return ' <a href="'.$this->url.'&page='.($this->page+1).'">下一页</a> ';
  }

  //尾页
  private function last() {
   if ($this->pagenum - $this->page > $this->bothnum) {
    return ' ...<a href="'.$this->url.'&page='.$this->pagenum.'">'.$this->pagenum.'</a> ';
   }
  }

  //分页信息
  public function showpage() {
   $_page .= $this->first();
   $_page .= $this->pageList();
   $_page .= $this->last();
   $_page .= $this->prev();
   $_page .= $this->next();
   return $_page;
  }
 }
?>

分页样式如下图所示:

使用说明:

<?php
 $_page = new Page($_total,$_pagesize); //其中 $_total 是数据集的总条数,$_pagesize 是每页显示的数量.
?>

第二个分页类:

<?php
/**
 * page.class.php 分页类
 * 日期:2015-04-05
 * http://aowana.sinaapp.com
 */
class page
{
  public static $url;
  public static $page;
  public static $total;
  public static $size;
  public static $number;
  public static $max;

  public static $action = array('previous', 'number', 'next');

  public static function show($url, $page, $total, $size=10, $number=11)
  {
    self::$url = $url;
    self::$page = $page;
    self::$total = $total;
    self::$size = $size;
    self::$number = $number;
    self::$max = ceil($total / $size);

    $str = '';
    foreach (self::$action as $name)
      $str .= self::$name();
    return $str;
  }

  public static function first()
  {
    if (self::$page > 2)
    {
      $url = self::url(1);
      return "<li id=\"pbfirst\"><a href=\"{$url}\" title=\"首页\">首页</a></li>";
    }
  }

  public static function previous()
  {
    if (self::$page > 1)
    {
      $url = self::url(self::$page - 1);
      return "<li id=\"pbprevious\"><a href=\"{$url}\" title=\"上一页\">上一页</a></li>";
    }
  }

  public static function number()
  {
    $str = '';
    $f = self::$number % 2 ? (self::$number - 1) / 2 : self::$number / 2;
    $s = self::$page - $f;
    $e = self::$page + $f;

    if (self::$page < ($f + 1))
    {
      $s = 1;
      $e = self::$number;
      $e = $e > self::$max ? self::$max : $e;
    }

    if (self::$page > (self::$max - $f))
    {
      $s = self::$max - self::$number;
      $s = $s < 1 ? 1 : $s;
      $e = self::$max;
    }

    for ($i=$s; $i<=$e; $i++)
    {
      $url = self::url($i);
      if ($i == self::$page)
        $str .= "<li><strong>{$i}</strong></li>";
      else
        $str .= "<li><a href=\"{$url}\" title=\"第{$i}页\">{$i}</a></li>";
    }
    return $str;
  }

  public static function next()
  {
    if (self::$page < self::$max)
    {
      $url = self::url(self::$page + 1);
      return "<li id=\"pbnext\"><a href=\"{$url}\" title=\"下一页\">下一页</a></li>";
    }
  }

  public static function end()
  {
    if ((self::$max - self::$page) > 1)
    {
      $url = self::url(self::$max);
      return "<li id=\"pbend\"><a href=\"{$url}\" title=\"末页\">末页</a></li>";
    }
  }

  public static function url($page)
  {
    return str_replace('{page}', $page, self::$url);
  }
}

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

(0)

相关推荐

  • 功能强大的php分页函数

    分页是每一个程序需要去理解的东西,学习过的几门语言中我发现分页原理都是一样的,下面为php初学者分析一下php分页实现与最后面补充了一个超级强大的分页函数. 文章内容分页主要有两个办法: 办法一.按字数控制进行分页 按字数分页办法简单易用,但效果不好. 大致思想:首先.设定每页能容纳的最大字数,然后.计算文章内容的总字数,再由总字数和单页最大字数计算出出总页数,这样整个分页的准备工作就已经做好了. 具体到每一页的显示内容可以通过内容截取来实现,比如:页容纳500字,文章内容有2200字,那么当页

  • jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解

    本文使用jQuery,结合PHP和Mysql,通过实例讲解如何实现Ajax数据加载效果. HTML <div id="list"> <ul></ul> </div> <div id="pagecount"></div> 页面中,#list用来展示数据列表,包括本例要展示的商品图片和标题,#pagecount用来展示分页条,即本例中的上一页.下一页. 当然,别忘了,在head中预先载入jquery

  • 两款万能的php分页类

    本文为大家分享个超级好用.万能的php分页类,具体的实现代码如下 第一款php分页类 <?php /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * 分页类 * 使用方式: * $page = new Page(); * $page->init(1000, 20); * $page->setNotActiveTemplate('<

  • PHP实现可自定义样式的分页类

    本文实例为大家分享了PHP实现可自定义样式的分页类,供大家参考,具体内容如下 <?php //namespace Component; /** * 2016-3-27 * @author ankang */ class Page { private $ShowPage; private $CountPage; private $Floorp; private $PageUrl; private $PageClass; private $CurClass; /** * @author ankang

  • Thinkphp3.2.3分页使用实例解析

    首先要搞清楚的就是ThinkPHP3.2.3的分页类已经被移到了Think\Page.class.php,这是跟以前的版本有些不一样的,使用起来还是跟以前版本差不多,但是默认的效果不敢恭维,所以最好是自己加些样式. 我加了一些样式(不怎么好看),大家可以自行的再去改进分页样式,效果图: 在这里我有先把page的设置做成了一个函数getpage,将这个方法放到Application\Common\Common\function.php(注意function不是类)中方便其他地方调用,代码如下: <

  • PHP框架Laravel插件Pagination实现自定义分页

    Laravel 的分页很方便,其实扩展起来也挺容易的,下面就来做个示例,扩展一下 paginate() 和 simplePaginate() 方法,来实现我们自定义分页样式,比如显示 "上一页" 和 "下一页" ,而不是 "<" 和 ">" ,当然扩展的方法掌握了你就可以肆无忌惮的扩展一个你想要的分页了,比如跳转到某一页,分页显示一共多少记录,当前显示的记录范围等等巴拉巴拉的... 5.1和5.2应该是同样的方法,

  • PHP实现适用于文件内容操作的分页类

    本文实例为大家分享了PHP实现文件内容操作的分页类,强调一下只针对文件的操作,供大家参考,具体内容如下 <?php class StrPage { private $current; //当前页 private $file; //操作文件 private $totalPage; //总的页数 private $url; //传递的参数 private $pageLen; //每页显示的长度 function __construct( $file,$len = 200 ){ $this->fil

  • php实现分页功能的3种方法第1/3页

    直接上代码,希望大家仔细阅读. 方法一:讲sql查询进行分页进行,需要调用几个函数,具体见脚本: 1.pager.class.php <?php class pager { public $sql; //SQL查询语句 public $datanum; //查询所有的数据总记录数 public $page_size; //每页显示记录的条数 protected $_errstr; protected $_conn; protected $_query_id; public function qu

  • 基于PHP实现数据分页显示功能

    本文实例为大家分享了数据分页显示功能的PHP实现代码,供大家参考,具体内容如下 实现代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>用户列表</title> </head> <body> <?php $con = mysql_connect("localhost","root&

  • PHP MSSQL 分页实例

    本文实例为大家分享了PHP MSSQL可刷新分页实例,具体内容如下 <?php /* '页面说明: */ $link=mssql_connect("MYSQL2005","sa","123456") or die("db link error!".mssql_error()); mssql_select_db("edu_dzk",$link) or die("db open error!&q

随机推荐