热门关键词: s
您的位置: 主页 > 新闻中心

全国服务热线

020-88888888

新闻列表页分页咋做?教你一步步实现,含代码和原理

作者:小编时间:2025-12-18 01:36 次浏览

信息摘要:

我们上一节课给大家讲述了新闻列表的功能制作,上节课中我们新闻列表页下面有一个分页功能!那么我们今天就来给大家介绍一下关于分页实现的制作过程!首先我们创建一个php文件page...

众多开发者于制作网站新闻列表之际,遭遇大量数据之时,分页功能乃是一道必须跨越的关卡。自行着手实现一回,相较于径直调用现成的类库,更能够领会其底层逻辑。

分页功能的核心逻辑

分页具备的根本目的是依照某种特定规则把那存储于数据库内可谓海量的数据一点一点切割为适用于页面展示这一行为特定形态的数量不等若干小块,该项过程起始于同提供数据支持的数据库达成连接这一必要步骤,而此步骤是针对所有以数据为操作对象行为而言的基础所在,在操作时你需要选用比如像 mysqli_connect 这类提供连接功能的函数,对主机标识名称、用户具备名称、进入数据库所需身份进行验证的密码以及数据信息得以存储之地数据库名称进行精准无误配置,在成功实现连接这一操作达成之后,才能够去着手执行紧接着的后续查询类操作。

你需明确针对哪一数据表实施分页,比如说新闻列表,那就得去查询存储新闻的那个数据表,经由执行“SELECT COUNT(*) ”这种的SQL语句,你能够获取到该表之中的总记录条数,这个数字是进行总页数计算的关键依据所在,要是没有它,分页根本就没办法进行的 。

// 显示所有的错误
error_reporting(E_ALL & ~E_NOTICE  );
// 连接mysql数据库
$link = mysqli_connect('localhost','root', 'root');
if (!$link) {
    echo "connect mysql error!";
    exit();
}
// 选中数据库 news为数据库的名字
$db_selected = mysqli_select_db($link, 'news');
if (!$db_selected) {
    echo "
selected db error!";     exit(); } // 设置mysql字符集 为 utf8 $link->query("set names utf8");

计算总页数与设置每页条数

在获取到总记录数之后,紧接着的下一步便是要去对每一页所展示的内容数量加以确定,此一数值通常是依据前端设计的排版状况以及用户体验情形来进行设定的,举例来说就是在每一页展示10条或者20条新闻这样的情况,借助总记录数除以每一页所设定的条数,如此便能够获取到理论层面上的总页数。

// 查询新闻表中的数据
$sql = "select * from new where 1 "; // 查询语句
$sql_count =  "select count(*) as amount from new where 1 "; // 统计总记录数
$sql .= "order by id asc";

在这儿得留意一个细微之处:要是总记录的数量没办法被每页所设置的条数整除,那么最终那一页的记录数量就会比设定好的值少。于PHP里面,你得运用ceil()函数朝着上进行取整,以此保证所有记录都能够被分配到某一个页面内。与此同时,要对记录数是零这种特殊情形予以处理,回避出现除零错误的状况。

当前页的确定与边界处理

用户借助点击页码或者“下一页”按钮这样子的操作来实现页面的切换,此请求一般是通过诸如?page=2这样类型的URL参数传递给服务器的,PHP代码要依靠$_GET全局数组以安全的方式获取这个页码对应的数值同时强制将其转换成为整数 。

// 获取总记录条数
$result_amount = mysqli_query($link, $sql_count);
$arr_amount = mysqli_fetch_array(mysqli_query($link, $sql_count), MYSQL_ASSOC);
// 总记录条数
$amount = $arr_amount['amount'];

需要针对所获取到的当下页码开展有效性校验,倘若页码要是小于1,那么便会自动将其修正为1,要是页码大于所计算得出的总页数,那就吧它修正为最大页码,此步骤确保了分页导航 的 robustness of pagination guide ,避免用户输入无效页码致使程序出现错误或者数据 查询产生异常 。

实现分页导航的算法

// 每页的记录条数
$page_size = 4;
// 总页码
$max_page = ceil( $amount / $page_size );

“上一页”、“下一页”以及一系列呈动态生成状的数字页码链接,是分页导航栏所需要有的。这种分页导航栏中有关乎核心的一个经典公式,它是:LIMIT起始位置,每页条数。于此公式里的“起始位置”,是通过(当前页减1)去与“每页条数〞相乘从而计算得出的。

在进行导航链接生成操作时,你得依据当前页所处位置来判定哪些元素具备可点击性。当处在起始页的时候,“上一页”按钮应当被设置为禁用状态或者予以隐藏处理;当处于末尾页之际,遵照同样的方式来处置“下一页”按钮。数字页码的生成一般是运用循环手段,并且能够去设定一个范围界限,以此防止在数据量极其庞大的时候出现过长导航栏 。

分离与引入分页模块

// 获取当前页码

$page = intval($_GET['page']); // 获取page值,并转成int
if( $page <= 0 || $page > $max_page){  // 如果page值小于0,或是大于最大页码
    $page = 1;
}
// 上一页
$pre_page = $page -1;
if( $pre_page < 1 ){ // 如果上一页小于1
    $pre_page = 1;
}
// 下一页
$next_page = $page + 1;
if( $next_page > $max_page ){ // 如果下一页大于最大页码
    $next_page = $max_page;
}
// 分页计算, 计算分页的offset
$offset = ($page - 1 ) * $page_size;
$sql .= " limit $offset, $page_size ";

要提升代码的复用特性以及可维护程度,理智的举措是把分页所具有的核心逻辑,封装于一个单独的PHP文件里,就像那个被称作‘page.php’的文件,这个文件应当着重于去计算分页相关的参数,并且生成导航HTML代码,而不用去操心具体的业务有关的数据查询 。

于新闻列表页面里头,你仅需借由include或者require语句去引入此分页文件。于查询新闻数据之 SQL 语句结尾处,添加上由分页模块计算得的LIMIT子句。最终,于列表下方恰当位置,输出分页模块所生成的导航链接便可。

自主实现与使用现成类库的权衡

自行亲手去编写一回分页代码,这能够使你极为深入地明白从数据库连接开始、总数查询、页码计算一直到SQL限定的整个链条,这种实践对于刚开始学习的人巩固PHP以及MySQL知识来讲是非常关键重要的。

于实际项目开发当中哟,鉴于效率方面的考量呢,开发者常常会去选用GitHub等这般平台之上的成熟分页类库呀。然而就算调用这个类库啦,明白它内部的原理呢,也能够协助你在碰到问题之际迅速地调试的哟,或者依据项目所需要求去进行定制化的修改哒,这才是学习的最终目标呀。

于您实际所涉项目其间,究竟是偏向自行去封装那分页组件,或者径直去运用现成的框架相应功能抑或是类库呢,欢迎于评论区域去分享您自身的经验以及理由,要是觉着此篇文章对己有所助益,还烦请实施点赞予以支持一下 。


首页
 1 ){
    ?>
    ">上一页
    
    ">下一页
    
">末页
/  总页码 页 当前页码