PHP实现可自定义样式的分页类
2016-08-31来源:

本文实例为大家分享了PHP实现可自定义样式的分页类,供大家参考,具体内容如下

//namespace Component;

/**

* 2016-3-27

* @author ankang

*/

class Page {

private $ShowPage;

private $CountPage;

private $Floorp;

private $PageUrl;

private $PageClass;

private $CurClass;

/**

* @author ankang

* @param number $CountNum 数据总数

* @param string $PageUrl 跳转链接

* @param string $PageClass 标签 总体样式

* @param string $PageUrl 当前页样式

* @param number $PageSize 每页显示的数据条数

* @param number $ShowPage 每次显示的页数

*/

public function __construct($CountNum, $PageUrl = NULL, $PageClass = NULL,$CurClass = NULL, $PageSize = 20, $ShowPage = 5) {

$this->ShowPage = $ShowPage;

$this->CountPage = ceil ( $CountNum / $PageSize );

$this->Floorp = floor ( $ShowPage / 2 ); // 偏移量

$this->PageClass = is_null ( $PageClass ) ? '' : $PageClass;

$this->CurClass = is_null ( $CurClass ) ? '' : $CurClass;

// $ServerURL = ( preg_match('/\?/i', $_SERVER['REQUEST_URI']))?preg_replace('/\&p\=[0-9]+/i', "", $_SERVER['REQUEST_URI']) : $_SERVER['REQUEST_URI']."?";

// if( substr($ButURL,0,2)=='//' ){

// $ServerURL = substr($ServerURL,1);

// }

// $url = preg_replace('/p=[\d]*/i', '', $ServerURL);

$url = '';

//推荐自己传url,不传也可以打开上面的代码自动获取

$this->PageUrl = is_null ( $PageUrl ) ? $url : $PageUrl;

}

/**

*

* @param number $Page

* @param string $ShowToPage

* 首页,上下页,尾页

* @param string $Html 标签元素,li,p

* @return string

*/

public function getPage($Page = 1, $ShowToPage = true, $Html = null) {

$StartPage = ($Page - $this->Floorp); // 开始页码

$EndPage = ($Page + $this->Floorp); // 结束页码

if ($this->CountPage < $this->ShowPage) {

$StartPage = 1;

$EndPage = $this->CountPage;

}

if ($StartPage < 1) {

$StartPage = 1;

$EndPage = $this->ShowPage;

}

if ($EndPage > $this->CountPage) {

$StartPage = $this->CountPage - $this->ShowPage + 1;

$EndPage = $this->CountPage;

}

$PageHtml = '';

if (! is_null ( $Html )) {

if ($Html == 'li') {

$Shtml = '

  • ';

    $Ehtml = '

  • ';

    } else {

    $Shtml = '

    ';

    $Ehtml = '

    ';

    }

    }

    if (true == $ShowToPage) {

    $PageHtml .= "$Shtml« 首页$Ehtml";

    $PrveUrl = $this->getPrve($Page);

    $PageHtml .= "$Shtml« 上一页$Ehtml";

    }

    for($i = $StartPage; $i <= $EndPage; $i ++) {

    if ($Page == $i) {

    $PageHtml .= "$Shtml{$i}$Ehtml";

    } else {

    $PageHtml .= "$Shtml{$i}$Ehtml";

    }

    }

    if (true == $ShowToPage) {

    $NextUrl = $this->getNext($Page);

    $PageHtml .= "$Shtml下一页 »$Ehtml";

    $PageHtml .= "$Shtml尾页 »$Ehtml";

    }

    return $PageHtml;

    }

    public function getPrve($Page){

    if ($Page != 1) {

    $Prve = $Page - 1;

    $PrveUrl = "{$this->PageUrl}p={$Prve}";

    } else {

    $PrveUrl = "//www.reelogic.com/wap/{$this->PageUrl}p=1";

    }

    return $PrveUrl;

    }

    public function getNext($Page){

    if ($Page != $this->CountPage) {

    $Next = $Page + 1;

    $NextUrl = "{$this->PageUrl}p={$Next}";

    } else {

    $NextUrl = "//www.reelogic.com/wap/{$this->PageUrl}p={$this->CountPage}";

    }

    return $NextUrl;

    }

    }

    再为大家分享一个主要用于新手学习php分页,代码简单实用,主要是注释很完整。

    1. Page.class.php

    /**

    * 分页类

    *

    * 调用方式:

    * $p=new Page(总页数,显示页数,当前页码,每页显示条数,[链接]);

    * print_r($p->getPages()); //生成一个页码数组(键为页码,值为链接)

    * echo $p->showPages(1); //生成一个页码样式(可添加自定义样式)

    *

    * @author: Dzer

    * @version: 2014-12-25 09:09:42

    * @Last Modified time: 2014-12-28 17:37:13

    */

    /*

    思路:

    给我一个 总页数,需要显示的页数,当前页,每页显示的条数,连接

    写一个方法 生成一个一维数组,键为页码 值为连接

    写一个方法 返回一个生成好样式的页码(并且可以根据自己需要添加样式)

    默认样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]

    */

    class Page{

    protected $count; //总条数

    protected $showPages; //需要显示的页数

    protected $countPages; //总页数

    protected $currPage; //当前页

    protected $subPages; //每页显示条数

    protected $href; //连接

    protected $page_arr=array(); //保存生成的页码 键页码 值为连接

    /**

    * __construct 构造函数(获取分页所需参数)

    * @param int $count 总条数

    * @param int $showPages 显示页数

    * @param int $currPage 当前页数

    * @param int $subPages 每页显示数量

    * @param string $href 连接(不设置则获取当前URL)

    */

    public function __construct($count,$showPages,$currPage,$subPages,$href=''){

    $this->count=$count;

    $this->showPages=$showPages;

    $this->currPage=$currPage;

    $this->subPages=$subPages;

    //如果链接没有设置则获取当前连接

    if(empty($href)){

    $this->href=htmlentities($_SERVER['PHP_SELF']);

    }else{

    $this->href=$href;

    }

    $this->construct_Pages();

    }

    /**

    * getPages 返回页码数组

    * @return array 一维数组 键为页码 值为链接

    */

    public function getPages(){

    return $this->page_arr;

    }

    /**

    * showPages 返回生成好的页码

    * @param int $style 样式

    * @return string 生成好的页码

    */

    public function showPages($style=1){

    $func='pageStyle'.$style;

    return $this->$func();

    }

    /**

    * pageStyle1 分页样式(可参照这个添加自定义样式 例如pageStyle2())

    * 样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]

    * @return string

    */

    protected function pageStyle1(){

    /* 构造普通模式的分页

    共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]

    */

    $pageStr='共'.$this->count.'条记录,每页显示'.$this->subPages.'条';

    $pageStr.='当前第'.$this->currPage.'/'.$this->countPages.'页 ';

    $_GET['page'] = 1;

    $pageStr.='[首页] ';

    //如果当前页不是第一页就显示上页

    if($this->currPage>1){

    $_GET['page'] = $this->currPage-1;

    $pageStr.='[上页] ';

    }

    foreach ($this->page_arr as $k => $v) {

    $_GET['page'] = $k;

    $pageStr.='['.$k.'] ';

    }

    //如果当前页小于总页数就显示下一页

    if($this->currPage<$this->countPages){

    $_GET['page'] = $this->currPage+1;

    $pageStr.='[下页] ';

    }

    $_GET['page'] = $this->countPages;

    $pageStr.='[尾页] ';

    return $pageStr;

    }

    /**

    * construct_Pages 生成页码数组

    * 键为页码,值为链接

    * $this->page_arr=Array(

    * [1] => index.php?page=1

    * [2] => index.php?page=2

    * [3] => index.php?page=3

    * ......)

    */

    protected function construct_Pages(){

    //计算总页数

    $this->countPages=ceil($this->count/$this->subPages);

    //根据当前页计算前后页数

    $leftPage_num=floor($this->showPages/2);

    $rightPage_num=$this->showPages-$leftPage_num;

    //左边显示数为当前页减左边该显示的数 例如总显示7页 当前页是5 左边最小为5-3 右边为5+3

    $left=$this->currPage-$leftPage_num;

    $left=max($left,1); //左边最小不能小于1

    $right=$left+$this->showPages-1; //左边加显示页数减1就是右边显示数

    $right=min($right,$this->countPages); //右边最大不能大于总页数

    $left=max($right-$this->showPages+1,1); //确定右边再计算左边,必须二次计算

    for ($i=$left; $i <= $right; $i++) {

    $_GET['page'] = $i;

    $this->page_arr[$i]=$this->href.'?'.http_build_query($_GET);

    }

    }

    }

    2. demo.php

    /**

    * 分页类demo

    * Be the best of whatever you are!

    *

    * @author: Dzer<358654744@qq.com>

    * @version: 2014-12-28 17:38:23

    * @Last Modified time: 2014-12-28 18:08:28

    */

    header("content-type:text/html;charset=utf8");

    include('./Page.class.php'); //引入类

    //$p=new Page(总页数,显示页数,当前页码,每页显示条数,[链接]);

    //连接不设置则为当前链接

    $page=isset($_GET['page']) ? $_GET['page'] : 1;

    $p=new Page(100,7,$page,8);

    //生成一个页码数组(键为页码,值为链接)

    echo "

    ";

    print_r($p->getPages());

    //生成一个页码样式(可添加自定义样式)

    //样式 共45条记录,每页显示10条,当前第1/4页 [首页] [上页] [1] [2] [3] .. [下页] [尾页]

    echo $p->showPages(1);

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

    2026上岸·考公考编培训报班

    • 报班类型
    • 姓名
    • 手机号
    • 验证码
    推荐信息
    Baidu
    map