分享一个简单的PHP分页类源码

这是站长平时经常在项目中应用的一个PHP分页类。类名为Paging,支持自定义构造翻页链接地址,可以自由在链接地址中添加所需的GET参数。

源代码可以到http://www.sunbloger.com/download/下载,提供了UTF-8和GBK两种编码版本。

源码如下:

<?php
/**
 * Paging
 * @author Jason.Wei <jasonwei06@hotmail.com>
 * @license http://www.sunbloger.com/
 * @version 2.0 utf-8
 */
class Paging
{
    /**
     * 每页显示行数
     * 
     * @var int
     */
    private $page_size;
    
    /**
     * 总行数
     * 
     * @var int
     */
    private $total_rows;
    
    /**
     * 页码显示量
     * 
     * @var int
     */
    private $list_size = 5;
    
    /**
     * 总页数
     * 
     * @var int
     */
    private $page_count;
    
    /**
     * 链接地址
     * 
     * @var string
     */
    private $page_link;

    /**
     * __construct 构造函数
     *
     * @param int $page_size 每页显示行数
     * @param int $total_rows 总行数
     * @param string $page_link 链接地址
     */
    function __construct($page_size, $total_rows, $page_link)
    {
        $this->page_size = intval($page_size);
        $this->total_rows = intval($total_rows);
        $this->page_count = ceil($total_rows / $page_size); //总页数 = 总行数 / 每页显示行数
        $this->page_link = $page_link;
    }
     
    /**
     * __destruct 析构函数
     */
    function __destruct()
    {
        unset($page_size);
        unset($total_rows);
        unset($list_size);
        unset($page_count);
        unset($page_link);
    }
    
    /**
     * 设置页码显示数量
     * 
     * @param int $size 页码显示数量
     */
    public function setListSize($size)
    {
        if (is_int($size)) $this->list_size = $size;
    }
    
    /**
     * iniArray 初始化页码列表数组
     *
     * @return array
     */
    private function iniArray()
    {
        $arr_page = array();
        for($i=0; $i<$this->list_size; $i++) {
            $arr_page[$i] = $i;
        }
        return $arr_page;
    }

    /**
     * constructPageList 构造页码列表
     *
     * @param int $page 当前页码
     * @return array
     * @example [1][2][3][4][5][6][7][8][9][10]
     */
    private function constructPageList($page)
    {
        if ($this->page_count < $this->list_size) {
            $arr_current = array();
            for($i=0; $i<$this->page_count; $i++) {
                $arr_current[$i] = $i + 1;
            }
        } else {
            $arr_current = $this->iniArray();
            $move_point = $this->list_size / 2;
            $move_point = floor($move_point) + 1;
            if ($page <= $move_point) {
                for($i=0; $i<count($arr_current); $i++) {
                    $arr_current[$i] = $i + 1;
                }
            } elseif ($page <= $this->page_count && $page > ($this->page_count - $this->list_size + $move_point) ) {
                for($i=0; $i<count($arr_current); $i++) {
                    $arr_current[$i] = ($this->page_count) - ($this->list_size) + 1 + $i;
                }
            } else {
                for($i=0; $i<count($arr_current); $i++) {
                    $arr_current[$i] = $page - ($move_point - 1) + $i;
                }
            }
        }
        return $arr_current;
    }
    
    /**
     * getPage 获取分页
     *
     * @param int $page 当前页码
     * @return string $html_code
     */
    public function getPage($page = 1)
    {
        $page = intval($page) > 0 ? intval($page) : 1;
        $html_code = "当前".$page."/".$this->page_count."页";
        if ($page > 1) {
            $first_page_url = str_replace('{PAGE_NUM}', '1', $this->page_link);
            $preview_page_url = str_replace('{PAGE_NUM}', ($page - 1), $this->page_link);
            $html_code .= " [<a href='$first_page_url'>首页</a>]";
            $html_code .= " [<a href='$preview_page_url'>上一页</a>] ";
        } else {
            $html_code .= " [首页]";
            $html_code .= " [上一页] ";
        }
        $arr_list_size = $this->constructPageList($page);
        for($i=0; $i<count($arr_list_size); $i++) {
            $now_page = $arr_list_size[$i];
            if ($now_page == $page) {
                $html_code .= "[<span style='color:red;'>".$now_page."</span>]";
            } else {
                $now_page_url = str_replace('{PAGE_NUM}', $now_page, $this->page_link);
                $html_code .= "[<a href='$now_page_url'>".$now_page."</a>]";
            }
        }
        if ($page < $this->page_count) {
            $last_page_url = str_replace('{PAGE_NUM}', $this->page_count, $this->page_link);
            $next_page_url = str_replace('{PAGE_NUM}', ($page + 1), $this->page_link);
            $html_code.= " [<a href='$next_page_url'>下一页</a>]";
            $html_code.= " [<a href='$last_page_url'>尾页</a>]";
        } else {
            $html_code .= " [下一页]";
            $html_code .= " [尾页]";
        }
        return $html_code;
    }
}
?>

相关内容:

发表评论