Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:现在知道了吧, 一个看起来非常简单的分页, 其实一点也不简单, 里面的门道好深
<?php
// 分页条显示5个页码
$showPages = 5;
// 分页条的起始页码
$startPage = 1;
// 分页条的终止页码
$endPage = $pages;
// 分页条的偏移量 (当前分页条显示页码数-1)/2
$offsetPage = ($showPages - 1) / 2;
// 只有当前分页条数量 < 总页数,才有必要显示出省略标记
if ($showPages < $pages) {
// 如果当前页 > 偏移量 +1 ,应该显示...因为1之前根本没有数据所以要在偏移量后面加一
if ($page > $offsetPage + 1) {
$startOmit = '...';
}
// 将当前分页条码重置
// 当前页大于偏移量(2)时 如第3页 左侧需要显示 ‘...’
if ($page > $offsetPage) {
$startPage = $page - $offsetPage;
$endPage = $page + $offsetPage;
// 当终止页码大于总页码时会不希望生成多余无内容的页码
if ($endPage > $pages) {
$endPage = $pages;
// 因为大于总页码的部分相当于被删掉了所以显示的的页面就少了
// 这时需要向前前面借少掉的部分
// 即:新起始页 = 当前起始页 - (当前页 + 加偏移量 -总页数)
// 注意:这里不能写($endPage - $pages)因为这里的$endPage = $pages
$startPage = $startPage - ($page + $offsetPage - $pages);
}
} else {
// 当前页如 1 小于偏移量(2)时 需要设置显示数量
$startPage = 1;
$endPage = $showPages;
}
// if ($page + $offsetPage > $pages) {
// 拿到上面去了
// $startPage = $startPage - ($page + $offsetPage - $pages);
// }
// 当终止页小于总页数时才有必要在右侧显示‘...’
if ($endPage < $pages) {
// 注意:不能用$startOmit因为显示的原理是存不存在只要当前页大于偏移量就会出现
// 所以不行 尾页附近都是远远大于偏移量的
$endOmit = '...';
}
}
?>
<!-- 这样写有问题到了第1页在减1会跑到第零页但是没有第零页所以要做个判断 -->
<!-- 想要达到:第一页时将上一页和首页隐藏掉 只需写css 代码display = none;不让加载就行 -->
<!-- 详情看f4.php -->
<!-- 首页 -->
<!-- 这里不用写查询字符串?p=1 因为默认当前脚本名称就是首页 当然加上也正确-->
<a href="<?php echo $_SERVER['PHP_SELF']; ?>">首页</a>
<!-- <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $page; ?>">首页</a> -->
<!-- 上一页 -->
<?php
$prve = ($page == 1) ? 1 : $page - 1;
?>
<!-- 这样写有问题到了第1页在减1会跑到第零页但是没有第零页所以要做个判断 -->
<a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $prve; ?>">上一页</a>
<?php if (isset($startOmit)) : ?>
<!-- 加一个#号点击后不会跳转只会在url地址栏里加一个# -->
<a href="#"><?php echo $startOmit; ?></a>
<?php endif; ?>
<?php for ($i = $startPage; $i <= $endPage; $i++) : ?>
<?php
$jump = sprintf('%s?p=%s', $_SERVER['PHP_SELF'], $i);
// 两组都可以
// 注意不要写$_GET['p']因为它可能不存在所以要写$page 它要么是$_GET['p']要么是 1
$active = ($i == $page) ? 'active' : null;
// if ($i == $page) {
// $active = 'active';
// } else {
// $active = null;
// }
?>
<a href="<?php echo $jump ?>" class="<?php echo $active ?>"><?php echo $i ?></a>
<!-- 当我们的php代码只有一行时可以省略分号 -->
<?php endfor ?>
<?php
$next = ($page == $pages) ? $pages : $page + 1;
?>
// <!-- 这样写有问题到了第1页在减1会跑到第零页但是没有第零页所以要做个判断 -->
// <!-- 想要达到:最后一页时将下一页和尾页隐藏掉 只需写css 代码display = none;不让加载就行 -->
// <!-- 详情看f4.php -->
<!-- <?php if (isset($startOmit)) : ?>
<a href="#"><?php echo $startOmit; ?></a>
<?php endif; ?> -->
<?php if (isset($endOmit)) : ?>
<a href="#"><?php echo $endOmit; ?></a>
<?php endif; ?>
<a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $next; ?>">下一页</?>
<a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $pages; ?>">尾页</a>
</p>
<?php
// 分页条显示5个页码
$showPages = 5;
// 分页条的起始页码
$startPage = 2;
// 分页条的终止页码
$endPage = $pages;
// 分页条的偏移量 (当前分页条显示页码数-1)/2
$offsetPage = ($showPages - 1) / 2;
// 只有当前分页条数量 < 总页数,才有必要显示出省略标记
if ($showPages < $pages) {
// 如果当前页 > 偏移量 +1 ,应该显示...因为1之前根本没有数据所以要在偏移量后面加一
if ($page > $offsetPage + 1) {
$startOmit = '...';
}
// 将当前分页条码重置
// 当前页大于偏移量(2)时 如第3页 左侧需要显示 ‘...’
// 因为我将1放到了外面所以显示的要整体往后移动一位
if ($page > $offsetPage + 1) {
$startPage = $page - $offsetPage + 1;
$endPage = $page + $offsetPage + 1;
// 当终止页码大于总页码时会不希望生成多余无内容的页码
if ($endPage > $pages - 1) {
$endPage = $pages - 1;
// 因为大于总页码的部分相当于被删掉了所以显示的的页面就少了
// 这时需要向前前面借少掉的部分
// 即:新起始页 = 当前起始页 - (当前页 + 加偏移量 -总页数)
// 注意:这里不能写($endPage - $pages)因为这里的$endPage = $pages
$startPage = $startPage - ($page + $offsetPage - ($pages - 1));
}
// 有问题
// if ($endPage >= $pages) {
// $endPage = $pages;
// } else {
// $endPage = $page + $offsetPage;
// }
} else {
// 当前页如 1 小于偏移量(2)时 需要设置显示数量
$startPage = 2;
$endPage = $showPages;
}
// if ($page + $offsetPage > $pages) {
// 拿到上面去了
// $startPage = $startPage - ($page + $offsetPage - $pages);
// }
// 当终止页小于总页数时才有必要在右侧显示‘...’
if ($endPage < $pages - 1) {
// 注意:不能用$startOmit因为显示的原理是存不存在只要当前页大于偏移量就会出现
// 所以不行 尾页附近都是远远大于偏移量的
$endOmit = '...';
}
}
?>
<!-- 这样写有问题到了第1页在减1会跑到第零页但是没有第零页所以要做个判断 -->
<!-- 想要达到:第一页时将上一页和首页隐藏掉 只需写css 代码display = none;不让加载就行 -->
<!-- 详情看f4.php -->
<!-- 首页 -->
<!-- 这里不用写查询字符串?p=1 因为默认当前脚本名称就是首页 当然加上也正确-->
<a href="<?php echo $_SERVER['PHP_SELF']; ?>">首页</a>
<!-- <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $page; ?>">首页</a> -->
<!-- 上一页 -->
<?php
$prve = ($page == 1) ? 1 : $page - 1;
?>
<!-- 这样写有问题到了第1页在减1会跑到第零页但是没有第零页所以要做个判断 -->
<a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $prve; ?>">上一页</a>
<!-- 这里照抄首页就行 -->
<?php
if ($page == 1) {
$active = 'active';
} else {
$active = null;
}
?>
<a href="<?php echo $_SERVER['PHP_SELF'] . '?p=1'; ?>" class="<?php echo $active ?>">1</a>
<?php if (isset($startOmit)) : ?>
<!-- 加一个#号点击后不会跳转只会在url地址栏里加一个# -->
<a href=" #"><?php echo $startOmit; ?></a>
<?php endif; ?>
<?php for ($i = $startPage; $i <= $endPage; $i++) : ?>
<?php
$jump = sprintf('%s?p=%s', $_SERVER['PHP_SELF'], $i);
// 两组都可以
// 注意不要写$_GET['p']因为它可能不存在所以要写$page 它要么是$_GET['p']要么是 1
$active = ($i == $page) ? 'active' : null;
// if ($i == $page) {
// $active = 'active';
// } else {
// $active = null;
// }
?>
<a href="<?php echo $jump ?>" class="<?php echo $active ?>"><?php echo $i ?></a>
<!-- 当我们的php代码只有一行时可以省略分号 -->
<?php endfor ?>
<?php
$next = ($page == $pages) ? $pages : $page + 1;
?>
<!-- 这样写有问题到了第1页在减1会跑到第零页但是没有第零页所以要做个判断 -->
<!-- 想要达到:最后一页时将下一页和尾页隐藏掉 只需写css 代码display = none;不让加载就行 -->
<!-- 详情看f4.php -->
<!-- <?php if (isset($startOmit)) : ?>
<a href="#"><?php echo $startOmit; ?></a>
<?php endif; ?> -->
<?php if (isset($endOmit)) : ?>
<a href="#"><?php echo $endOmit; ?></a>
<?php endif; ?>
<?php
if ($page == $pages) {
$active = 'active';
} else {
$active = null;
}
?>
<a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $pages; ?>" class="<?php echo $active ?>"><?php echo $pages; ?></a>
<a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $next; ?>">下一页</?>
<a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $pages; ?>">尾页</a>