接下来我将为您详细讲解如何编写PHP仿ZOL分页类代码。
一、了解分页
为了更好地理解分页类的代码,我们首先需要了解分页是什么。分页是指将数据分割成多个部分进行显示,使得数据过多时可以分页展示,从而提高页面的加载速度,方便用户的查看。常见的分页方式有传统的数字翻页和类似于“下一页”、“上一页”的ajax异步加载。
二、开始写PHP仿ZOL分页类代码
1.建立分页类文件
我们首先需要建立一个php文件,用于存放分页类的代码。命名可以为page.class.php
2.开始写类
在page.class.php文件中,我们需要先定义一个类Page,类的代码如下:
class Page
{
//类变量定义
private $total; //总记录数
private $pagesize; //每页显示的记录数
private $limit; //SQL语句中的limit参数
private $page; //当前页码
private $pagenum; //总页数
private $url; //分页链接地址
//初始化属性
public function __construct($total, $pagesize)
{
$this->total = $total;
$this->pagesize = $pagesize;
$this->pagenum = ceil($this->total / $this->pagesize);
$this->page = $this->setPage();
$this->limit = ($this->page - 1) * $this->pagesize . "," . $this->pagesize;
$this->url = $this->setUrl();
}
//设置当前页码
private function setPage()
{
if (!empty($_GET["page"])) {
if ($_GET["page"] > 0) {
if ($_GET["page"] > $this->pagenum) {
return $this->pagenum;
} else {
return $_GET["page"];
}
} else {
return 1;
}
} else {
return 1;
}
}
//设置分页链接地址
private function setUrl()
{
$url = $_SERVER["REQUEST_URI"];
$parse = parse_url($url);
if (isset($parse["query"])) {
parse_str($parse["query"], $params);
unset($params["page"]);
$url = $parse["path"] . "?" . http_build_query($params);
}
return $url;
}
//获取分页链接
private function getUrl()
{
$url = $this->url;
$url .= (strrpos($url, "?") === false ? "?" : "&") . "page=";
return $url;
}
//获取分页HTML代码
public function show()
{
$pagehtml = "<div class='page'>";
$pagehtml .= "<span class='total'>共{$this->total}条记录 </span>";
if ($this->page > 1) {
$pagehtml .= "<a href='{$this->getUrl()}1'>首页</a>";
$pagehtml .= "<a href='{$this->getUrl()}{$this->page-1}' class='prev'>上一页</a>";
} else {
$pagehtml .= "<span class='inactive'>首页</span>";
$pagehtml .= "<span class='inactive'>上一页</span>";
}
if ($this->pagenum > 10) {
$start = $this->page - 5;
$end = $this->page + 4;
if ($start < 1) {
$end += abs($start) + 1;
$start = 1;
}
if ($end > $this->pagenum) {
$start -= ($end - $this->pagenum);
$end = $this->pagenum;
}
} else {
$start = 1;
$end = $this->pagenum;
}
for ($i = $start; $i <= $end; $i++) {
if ($i == $this->page) {
$pagehtml .= "<span class='current'>{$i}</span>";
} else {
$pagehtml .= "<a href='{$this->getUrl()}{$i}'>{$i}</a>";
}
}
if ($this->page < $this->pagenum) {
$pagehtml .= "<a href='{$this->getUrl()}{$this->page+1}' class='next'>下一页</a>";
$pagehtml .= "<a href='{$this->getUrl()}{$this->pagenum}'>末页</a>";
} else {
$pagehtml .= "<span class='inactive'>下一页</span>";
$pagehtml .= "<span class='inactive'>末页</span>";
}
$pagehtml .= "</div>";
return $pagehtml;
}
//获取limit参数
public function getLimit()
{
return $this->limit;
}
}
3.功能分析
上面是一个完整的分页类代码,下面对各个方法做一个简单的分析:
1.初始化属性(__construct方法)
在初始化属性时,需要传入总记录数和每页显示的记录数两个参数,在构造方法中进行计算,获取总页数。
2.设置当前页码(setPage方法)
根据传入的页码参数 $_GET["page"],判断当前页码,如果页码小于1,则设置为1,如果页码大于总页数,则设置为总页数。
3.设置分页链接地址(setUrl方法)
通过解析当前URL地址,获取其中的查询字符串,去除page参数后,重新拼接成新的URL。
4.获取分页链接(getUrl方法)
根据获取到的分页链接地址,拼接成类似于“http://www.example.com/index.php?page=”的分页链接格式。
5.获取分页HTML代码(show方法)
通过上述步骤计算出当前页码、总页数、分页链接地址等,生成一个类似于<ul>
、<li>
等HTML代码的分页导航栏,并通过CSS美化样式。其中,通过if语句判断当前页码是否大于1,如果是则显示“首页”、“上一页”,如果小于1则显示灰色的“首页”、“上一页”不可点击字样,通过for循环遍历页码,如果当前页码等于当前遍历到的页码,则添加类名current表示当前页,否则生成类似于“1”、“2”、“3”等的页码链接;最后通过if语句判断当前页码是否为最后一页,如果是,则显示“下一页”、“末页”,否则显示灰色的“下一页”、“末页”不可点击字样。
6.获取limit参数(getLimit方法)
通过计算获取到当前页码应该显示的记录的起始位置和终止位置,将其组合成类似于“0,10”、“11,10”这样的limit参数。
4.示例
示例一:调用分页类
假如我们有一个图书列表页面,需要进行分页展示,我们可以通过如下方式调用分页类:
<?php
include_once("page.class.php");
$total = 100; //总记录数
$pagesize = 10; //每页显示的记录数
$page = new Page($total, $pagesize); //实例化分页类
$limit = $page->getLimit(); //获取limit参数
$sql = "SELECT * FROM book LIMIT {$limit}"; //SQL语句中添加limit参数
//执行查询操作
?>
示例二:页面显示分页导航栏
我们将分页导航栏代码封装在page.class.php的show方法中,可以通过如下方式在页面中显示分页导航栏:
<html>
<head>
<title>图书列表 - 第<?php echo $page->getPage();?>页</title>
<style type="text/css">
.page {text-align:center;}
.page a,.page span {margin:0 3px;padding:2px 8px;border:1px solid #D2D2D2;}
.page span {background-color:#F7F7F7;color:#666;text-decoration:none;cursor:default;}
.page .current {background-color:#3366CC;color:#FFF;text-decoration:none;}
.page .total {font-size:12px;margin-right:10px;}
.page .prev,.page .next {font-size:12px;background-color:#3366CC;color:#FFF;}
.page .inactive {background-color:#F7F7F7;color:#999;border-color:#D2D2D2;}
</style>
</head>
<body>
<?php echo $page->show();?>
</body>
</html>
通过上述示例,我们可以将分页类应用在自己的项目中,实现分页展示的效果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php仿ZOL分页类代码 - Python技术站