这是站长平时经常在项目中应用的一个PHP分页类。类名为Paging,支持自定义构造翻页链接地址,可以自由在链接地址中添加所需的GET参数。
源代码可以到http://www.sunbloger.com/download/下载,提供了UTF-8和GBK两种编码版本。
源码如下:
代码语言:javascript复制<?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;
}
}
?>