这是站长平时经常在项目中应用的一个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; } } ?>