1 分页简介
当列表中的记录非常多时,为了方便查询,使用分页功能。
2 分页效果
3 分页原理
利用LIMIT关键字限制SELECT语句查询出的数据
SELECT * FROM news LIMIT 0,3; # 查询第1页的3条数据
SELECT * FROM news LIMIT 3,3; # 查询第2页的3条数据
# 第1个参数与页码之间存在一定的数学关系。
# 第2个参数表示每次查询的最大条数。
# LIMIT第1个参数计算方式:LIMIT 第1个参数 = (页码 - 1) * 每页查询的条数
4 开发思路
定义变量:定义页码和查询条数变量。
查询总记录数:查询新闻表中的总记录数,计算出总页数。
计算LIMIT参数:根据当前页码计算出LIMIT的两个参数值,拼接查询语句。
分页导航:添加“首页”“上一页” “下一页”“末页”分页导航。
页码链接:当总页数小于或等于7时,显示所有的页码数。
页码链接:总页数大于7页、当前页小于等于5时,生成数字导航链接。
页码链接:总页数大于7页,当前页大于5时,生成数字导航链接。
显示分页:在页面中显示分页内容。
5 页码链接
6 具体实现
1)定义变量:定义页码和查询条数变量
$page = $_GET['page'] ?? 1; // 当前页码
$pagecount = 4; // 每页显示的条数
2)查询总记录数:查询新闻表中的总记录数,计算出总页数
$count_sql = 'SELECT count(*) AS total FROM news';
$res = read($conn, $count_sql, $error);
$count = $res['total'] ?? 0;
$pages = ceil($count / $pagecount);
3) 根据页码计算LIMIT参数:计算LIMIT参数,替换查询语句
$offset = ($page - 1) * $pagecount; // 计算分页的第1个参数值
$limit = " LIMIT $offset,$pagecount";
$sql = "SELECT n.*,a.name FROM news n LEFT JOIN author a
ON n.a_id=a.id ORDER BY n.id " . $limit;
$news = read($conn, $sql, $error, true);
4)分页导航:添加“首页”“上一页” “下一页”“末页”分页导航
$pageinfo = '';
$pageinfo .= "<a href=\"index.php?page=1\">首页</a>";
if ($page != 1) {
$prev = $page - 1;
$pageinfo .= "<a href=\"index.php?page={$prev}\">上一页</a>";
}
// (在此处添加具体页码)……
if ($page != $pages) {
$next = $page + 1;
$pageinfo .= "<a href=\"index.php?page={$next}\">下一页</a>";
}
$pageinfo .= "<a href=\"index.php?page={$pages}\">末页</a>";
5)页码链接1:当总页数小于或等于7时,显示所有的页码数
if ($pages <= 7) {
for ($i = 1; $i <= $pages; $i++) {
if ($page == $i) {
$pageinfo .= “<a class=\"current\" href=\"index.php?page={$i}\">{$i}</a>";
} else {
$pageinfo .= "<a href=\"index.php?page={$i}\">{$i}</a>";
}
}
} else {
// (在此处添加页码大于7的代码)……
}
6)页码链接2:总页数大于7页、当前页小于等于5时,生成数字导航链接
if ($page <= 5) {
for ($i = 1; $i <= 7; $i++) {
if ($page == $i) {
$pageinfo .= "<a class=\"current\" href=\"index.php?page={$i}\">{$i}</a>";
} else {
$pageinfo .= "<a href=\"index.php?page={$i}\">{$i}</a>";
}
}
$pageinfo .= "<a href=\"javascript:return false;\" onclick=\"return false;\">...</a>";
} else {
// (在此处添加当前页大于5的代码)……
}
7)根据页码计算LIMIT参数:总页数大于7页,当前页大于5时,生成数字导航链接
$pageinfo .= "<a href=\"index.php?page=1\">1</a>";
$pageinfo .= "<a href=\"index.php?page=2\">2</a>";
$pageinfo .= "<a href=\"javascript:return false;\" onclick=\"return false;\">...</a>";
if ($page > $pages - 3) {
for ($i = $pages - 4; $i <= $pages; $i++) {
if($page == $i){
$pageinfo .= "<a class=\"current\" href=\"index.php?page={$i}\">{$i}</a>";
} else {
$pageinfo .= "<a href=\"index.php?page={$i}\">{$i}</a>";
}
}
} else {
…… (见下一页)
}
8)根据页码计算LIMIT参数:总页数大于7页,当前页大于5时,生成数字导航链接
for ($i = $page - 2; $i <= $page + 2; $i++) {
if ($page == $i) {
$pageinfo .= "<a class=\"current\" href=\"index.php?page={$i}\">{$i}</a>";
} else {
$pageinfo .= "<a href=\"index.php?page={$i}\">{$i}</a>";
}
}
$pageinfo .= "<a href=\"javascript:return false;\" onclick=\"return false;\">...</a>";
9)显示分页:在页面中显示分页内容
<div class="page">
<?php echo $pageinfo;?>
</div>
注意:封装的函数在这里