📅  最后修改于: 2023-12-03 15:18:27.844000             🧑  作者: Mango
在网页上显示长列表时,通常需要分页来减少页面加载时间并提高用户体验。在分页导航栏中,如果有多页,通常显示当前页码以及前后若干页码,用省略号来表示中间省略的页码。因此,本片段将介绍如何使用 PHP 实现分页省略号。
在开始之前,我们需要准备以下数据:
我们可以使用如下代码获取这些数据:
$page_size = 10; // 每页显示的项数
$total_items = 100; // 总项数
$current_page = 5; // 当前页码
$page_count = 10; // 每次显示的页码数量
首先,我们需要计算出起始页码和结束页码。对于当前页码,我们可以以当前页码为中心,前后各取一半的页码数量:
$half_page_count = (int)($page_count / 2);
$start_page = $current_page - $half_page_count;
$end_page = $current_page + $half_page_count;
但是,如果起始页码小于 1,或者结束页码大于总页面数,我们需要对其进行调整:
if ($start_page < 1) {
$start_page = 1;
$end_page = $start_page + $page_count - 1;
}
if ($end_page > ceil($total_items / $page_size)) {
$end_page = ceil($total_items / $page_size);
$start_page = $end_page - $page_count + 1;
if ($start_page < 1) {
$start_page = 1;
}
}
接下来就可以通过循环输出页码了。在输出页码前,我们需要输出省略号。如果当前页码距离起始页码超过一个页码,则需要输出省略号:
if ($start_page > 1) {
echo '... ';
}
同样,如果当前页码距离结束页码超过一个页码,则需要输出省略号:
for ($i = $start_page; $i <= $end_page; $i++) {
if ($i == $current_page) {
echo "<strong>$i</strong> ";
} else {
echo "<a href=\"/page/$i\">$i</a> ";
}
}
if ($end_page < ceil($total_items / $page_size)) {
echo '...';
}
将上述代码整合到一起,就可以得到以下完整代码片段:
$page_size = 10; // 每页显示的项数
$total_items = 100; // 总项数
$current_page = 5; // 当前页码
$page_count = 10; // 每次显示的页码数量
$half_page_count = (int)($page_count / 2);
$start_page = $current_page - $half_page_count;
$end_page = $current_page + $half_page_count;
if ($start_page < 1) {
$start_page = 1;
$end_page = $start_page + $page_count - 1;
}
if ($end_page > ceil($total_items / $page_size)) {
$end_page = ceil($total_items / $page_size);
$start_page = $end_page - $page_count + 1;
if ($start_page < 1) {
$start_page = 1;
}
}
if ($start_page > 1) {
echo '... ';
}
for ($i = $start_page; $i <= $end_page; $i++) {
if ($i == $current_page) {
echo "<strong>$i</strong> ";
} else {
echo "<a href=\"/page/$i\">$i</a> ";
}
}
if ($end_page < ceil($total_items / $page_size)) {
echo '...';
}
本片段介绍了如何使用 PHP 实现分页省略号。通过计算起始页码和结束页码,并在符合条件时输出省略号,就可以实现美观实用的分页导航栏了。