/**
* 分页类
*/
class Page{
private $page_items_nums; // 每页显示的数据个数
private $nums; // 数据总数
private $current_page; // 当前页
private $sub_pages; // 页面显示的页数个数(如 1 2 3 4 5显示5个)
private $total_page_nums; // 总页数
private $page_array = array(); // 用来构造分页的数组
private $page_link; // 分页链接
private $page_link_type; // 分页链接样式 1(example:共45条记录,每页显示10条,当前第1/45页 [首页] [上页] [下页] [尾页]) 2(example:当前第1/45页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页])
function __construct() {}
function __destruct() {
unset($this->page_items_nums);
unset($this->nums);
unset($this->current_page);
unset($this->sub_pages);
unset($this->total_page_nums);
unset($this->page_array);
unset($this->page_link);
unset($this->page_link_type);
}
/**
* 初始化分页类
* @param int $page_items_nums 每页显示的数据个数
* @param int $nums 数据总数
* @param int $current_page 当前页
* @param int $sub_pages 页面显示的页数个数(如 1 2 3 4 5显示5个)
* @param string $page_link 分页链接
* @param int $page_link_type 分页链接样式 1(example:共45条记录,每页显示10条,当前第1/45页 [首页] [上页] [下页] [尾页]) 2(example:当前第1/45页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页])
* @return type
*/
public function initinfo($page_items_nums, $nums, $current_page, $sub_pages, $page_link, $page_link_type){
$this->page_items_nums = intval($page_items_nums);
$this->nums = intval($nums);
// 设置当前页
if (!$current_page) {
$this->current_page = 1;
} else {
$this->current_page = intval($current_page);
}
$this->sub_pages = intval($sub_pages);
// 计算总页数
$this->total_page_nums = ceil($nums / $page_items_nums);
$this->page_link = $page_link;
return $this->show_pages($page_link_type);
}
/**
* 选择分页样式
* @param int $page_link_type 分页链接样式
* @return type
*/
function show_pages($page_link_type) {
if ($page_link_type == 1) {
return $this->page_css_1();
} else if ($page_link_type == 2) {
return $this->page_css_2();
} else if($page_link_type == 3){
return $this->page_css_3();
}
}
/**
* 用来给建立分页的数组初始化的函数
* @return type
*/
function initArray() {
for ($i = 0; $i < $this->sub_pages; $i++) {
$this->page_array[$i] = $i;
}
return $this->page_array;
}
/**
* 构造显示的页数 如 1 2 3 4 5
* @return type
*/
function construct_num_Page() {
if ($this->total_page_nums < $this->sub_pages) {
$current_array = array();
for ($i = 0; $i < $this->total_page_nums; $i++) {
$current_array[$i] = $i + 1;
}
} else {
$current_array = $this->initArray();
if ($this->current_page <= 3) {
for ($i = 0; $i < count($current_array); $i++) {
$current_array[$i] = $i + 1;
}
} else if ($this->current_page <= $this->total_page_nums && $this->current_page > $this->total_page_nums - $this->sub_pages + 1) {
for ($i = 0; $i < count($current_array); $i++) {
$current_array[$i] = ($this->total_page_nums) - ($this->sub_pages) + 1 + $i;
}
} else {
for ($i = 0; $i < count($current_array); $i++) {
$current_array[$i] = $this->current_page - 2 + $i;
}
}
}
return $current_array;
}
/**
* 构造普通模式的分页 共45条记录,每页显示10条,当前第1/45页 [首页] [上页] [下页] [尾页]
*/
function page_css_1() {
$subPageCss1Str = "";
$subPageCss1Str.="共" . $this->nums . "条记录,";
$subPageCss1Str.="每页显示" . $this->page_items_nums . "条,";
$subPageCss1Str.="当前第" . $this->current_page . "/" . $this->total_page_nums . "页 ";
if ($this->current_page > 1) {
$firstPageUrl = $this->page_link . "1";
$prewPageUrl = $this->page_link . ($this->current_page - 1);
$subPageCss1Str.="[<a href='$firstPageUrl'>首页</a>] ";
$subPageCss1Str.="[<a href='$prewPageUrl'>上一页</a>] ";
} else {
$subPageCss1Str.="[首页] ";
$subPageCss1Str.="[上一页] ";
}
if ($this->current_page < $this->total_page_nums) {
$lastPageUrl = $this->page_link . $this->total_page_nums;
$nextPageUrl = $this->page_link . ($this->current_page + 1);
$subPageCss1Str.=" [<a href='$nextPageUrl'>下一页</a>] ";
$subPageCss1Str.="[<a href='$lastPageUrl'>尾页</a>] ";
} else {
$subPageCss1Str.="[下一页] ";
$subPageCss1Str.="[尾页] ";
}
echo $subPageCss1Str;
}
/**
* 构造经典模式的分页(js交互) 当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
* @return string
*/
function page_css_2() {
$subPageCss2Str = "";
$subPageCss2Str.="当前第" . $this->current_page . "/" . $this->total_page_nums . "页 ";
if ($this->current_page > 1) {
$firstPageUrl = $this->page_link . "1";
$prewPageUrl = $this->page_link . ($this->current_page - 1);
$prenum = $this->current_page - 1;
$subPageCss2Str.="[<span style='cursor:pointer' name='1'>首页</span>] ";
$subPageCss2Str.="[<span style='cursor:pointer' name='$prenum'>上一页</span>] ";
} else {
$subPageCss2Str.="[首页] ";
$subPageCss2Str.="[上一页] ";
}
$a = $this->construct_num_Page();
for ($i = 0; $i < count($a); $i++) {
$s = $a[$i];
if ($s == $this->current_page) {
$subPageCss2Str.="[<b style='color:red;font-weight:bold;'>" . $s . "</b>]";
} else {
$url = $this->page_link . $s;
$subPageCss2Str.="[<span style='cursor:pointer' name='$s'>" . $s . "</span>]";
}
}
if ($this->current_page < $this->total_page_nums) {
$lastPageUrl = $this->page_link . $this->total_page_nums;
$nextPageUrl = $this->page_link . ($this->current_page + 1);
$nextnum = $this->current_page + 1;
$subPageCss2Str.=" [<span style='cursor:pointer' name='$nextnum'>下一页</span>] ";
$subPageCss2Str.="[<span style='cursor:pointer' name='$this->total_page_nums'>尾页</span>] ";
} else {
$subPageCss2Str.="[下一页] ";
$subPageCss2Str.="[尾页] ";
}
return $subPageCss2Str;
}
/**
* 构造经典模式的分页(url交互) 当前第1/45页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
* @return string
*/
function page_css_3() {
$subPageCss3Str = "";
$subPageCss3Str.="当前第" . $this->current_page . "/" . $this->total_page_nums . "页 ";
if ($this->current_page > 1) {
$firstPageUrl = $this->page_link . "1";
$prewPageUrl = $this->page_link . ($this->current_page - 1);
$subPageCss3Str.="[<a href='$firstPageUrl'>首页</a>] ";
$subPageCss3Str.="[<a href='$prewPageUrl'>上一页</a>] ";
} else {
$subPageCss3Str.="[首页] ";
$subPageCss3Str.="[上一页] ";
}
$a = $this->construct_num_Page();
for ($i = 0; $i < count($a); $i++) {
$s = $a[$i];
if ($s == $this->current_page) {
$subPageCss3Str.="[<span style='color:red;font-weight:bold;'>" . $s . "</span>]";
} else {
$url = $this->page_link . $s;
$subPageCss3Str.="[<a href='$url'>" . $s . "</a>]";
}
}
if ($this->current_page < $this->total_page_nums) {
$lastPageUrl = $this->page_link . $this->total_page_nums;
$nextPageUrl = $this->page_link . ($this->current_page + 1);
$subPageCss3Str.=" [<a href='$nextPageUrl'>下一页</a>] ";
$subPageCss3Str.="[<a href='$lastPageUrl'>尾页</a>] ";
} else {
$subPageCss3Str.="[下一页] ";
$subPageCss3Str.="[尾页] ";
}
return $subPageCss3Str;
}
// 可根据自己的需求再建立 page_css_*
}
function test()
{
// 分页设置
$pageclass = new Page();
// 每页显示数目
$size = 10;
// 总条目数
$nums = count();
// 得到当前是第几页
$pageCurrent = $p;
// 分页链接显示的页数
$sub_pages = 5;
// url 参数p一定要在最后
$url = './list.php?size='.$size.'&p=';
// 获取分页链接
$page_link = $pageclass->initinfo($size, $nums, $pageCurrent, $sub_pages, $url, 4);
// 获取数据
//$data = ...;
return array('data'=>$data,'page_link'=>$page_link)
}