You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为PHP读取XML数据的页面添加分页(每页30条)

为XML数据展示添加分页功能

实现步骤

  1. 先筛选并收集符合条件的产品:不再直接循环输出,先把所有属于Lotions分类的产品存入数组,方便后续分页计算。
  2. 处理分页参数:通过URL的page参数获取当前页码,默认显示第一页;设定每页显示30个产品。
  3. 计算分页数值:基于筛选后的产品总数,计算总页数,确定当前页需要展示的产品范围。
  4. 生成分页导航:输出上一页、页码列表、下一页的导航按钮,处理边界状态(比如第一页隐藏上一页,最后一页隐藏下一页)。

修改后的完整代码

<?php
// 加载XML数据
$xml_data = simplexml_load_file("https://www.website.com/file.xml") or die("Error: Object Creation failure");

// 筛选并收集所有Lotions分类的产品
$filtered_items = [];
foreach ($xml_data->children() as $data) {
    if (str_contains($data->category, 'Lotions')) {
        $filtered_items[] = $data; // 将符合条件的对象存入数组
    }
}

// 分页配置
$per_page = 30; // 每页显示数量
$total_items = count($filtered_items);
$total_pages = ceil($total_items / $per_page); // 计算总页数

// 获取当前页码,默认1,确保是有效整数
$current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$current_page = max(1, min($current_page, $total_pages)); // 限制页码范围,防止越界

// 计算当前页的起始索引
$start_index = ($current_page - 1) * $per_page;
// 截取当前页需要展示的产品
$current_items = array_slice($filtered_items, $start_index, $per_page);

// 输出当前页的产品
foreach ($current_items as $data) {
    echo "<div class='col-md-4'>";
        echo "<div class='item-xml'>";
            echo "<div class='title-xml'>$data->title</div>";
            echo "<img class='image-xml' src='{$data->images[0]->image->location}'>";
            echo "<div class='price-xml'>€ $data->price</div>";
            echo "<a href='$data->link' target='_blank'><div class='link-xml'></div></a>";
        echo "</div>";
    echo "</div>";
}

// 输出分页导航
if ($total_pages > 1) {
    echo "<div class='pagination' style='margin-top: 20px; text-align: center;'>";
        // 上一页按钮
        if ($current_page > 1) {
            echo "<a href='?page=" . ($current_page - 1) . "' style='margin: 0 5px; padding: 8px 12px; border: 1px solid #ddd; text-decoration: none;'>上一页</a>";
        }

        // 页码列表,只显示当前页前后2个页码,避免页码过多
        for ($i = max(1, $current_page - 2); $i <= min($total_pages, $current_page + 2); $i++) {
            $active = ($i == $current_page) ? "style='background: #007bff; color: white; border-color: #007bff;'" : "";
            echo "<a href='?page=$i' style='margin: 0 5px; padding: 8px 12px; border: 1px solid #ddd; text-decoration: none;' $active>$i</a>";
        }

        // 下一页按钮
        if ($current_page < $total_pages) {
            echo "<a href='?page=" . ($current_page + 1) . "' style='margin: 0 5px; padding: 8px 12px; border: 1px solid #ddd; text-decoration: none;'>下一页</a>";
        }
    echo "</div>";
}
?>

代码说明

  • 筛选收集:先把所有符合条件的产品存入数组,避免重复遍历XML,也方便分页计算。
  • 页码安全处理:通过max()和min()限制当前页码在有效范围内,防止用户输入非法页码导致错误。
  • 分页导航优化:只显示当前页前后2个页码,避免页码过多影响页面美观;同时给当前页添加高亮样式。
  • 样式说明:导航部分添加了基础内联样式,你可以根据自己的页面风格修改成对应的CSS类。

内容的提问来源于stack exchange,提问作者chechu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:36:21