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

PrestaShop子分类分页异常:最后一页后出现2个空白页求助

解决PrestaShop子分类分页多出空白页的问题

我帮你排查了代码里的核心问题,是分页变量的定义和计算逻辑混淆导致的,下面是具体的修复步骤:

1. 修正CategoryController中的分页变量计算

你的assignSubcategories函数里,subcategories_nb_per_page的计算完全错误——它本该表示每页显示的子分类数量(比如你设定的15),但你现在用ceil(count($sub_categories)/15)算出来的是总页数,变量名和实际含义不匹配,直接导致模板分页逻辑混乱。

修改后的控制器代码:

/** 
 * Assigns subcategory templates variables 
 */ 
protected function assignSubcategories() { 
    // Get pagination parameter 
    $p = 1; 
    if ( isset( $_GET['p'] ) && ! empty( $_GET['p'] ) ) { 
        $p = (int) $_GET['p']; 
    } 

    if ($sub_categories = $this->category->getSubCategories($this->context->language->id)) {
        // 定义每页显示的子分类数量(建议后续提取到后台配置项,方便修改)
        $subcats_per_page = 15;
        // 计算正确的总页数
        $subcats_total_pages = ceil(count($sub_categories) / $subcats_per_page);

        // 防止访问超过总页数的非法页码,自动重定向到最后一页
        if ($p > $subcats_total_pages) {
            Tools::redirect($this->context->link->getCategoryLink($this->category, null, null, ['p' => $subcats_total_pages]));
        }

        $this->context->smarty->assign(array( 
            'subcategories_nb_total' => count($sub_categories), 
            'subcategories_with_pagination' => $this->category->getSubCategoriesWithPagination( 
                $this->context->language->id, 
                true, 
                $p,
                $subcats_per_page // 确保分页方法接收每页数量参数
            ), 
            'subcategories_nb_per_page' => $subcats_per_page, // 正确的每页显示数量
            'subcategories_total_pages' => $subcats_total_pages, // 新增总页数变量
            'subcategories_nb_half' => ceil(count($sub_categories) / 2)  
        )); 
    } 
}

关键注意点:

  • 确认你的getSubCategoriesWithPagination方法内部会用$subcats_per_page做数据截取(比如SQL的LIMIT ($p-1)*$per_page, $per_page),如果之前方法没接收这个参数,需要同步修改方法定义。
  • 新增的页码越界判断,能避免用户手动输入非法页码时出现空白页。

2. 修正Smarty模板中的分页变量引用

模板里你错误地把$subcategories_nb_per_page当成总页数使用,现在替换成我们新增的正确变量:

找到模板中的这行代码:

{assign var='pages_nb' value={$subcategories_nb_per_page}}

替换为:

{assign var='pages_nb' value=$subcategories_total_pages}

3. 验证修复效果

完成上述修改后:

  • 总页数会根据子分类总数和每页15个的规则正确计算
  • 访问最后一页时,不会再出现额外的空白页
  • 输入超过总页数的页码会自动跳转到最后一页,避免空白内容

额外优化建议

  • 把每页显示数量15改为后台可配置项,比如新增PS_SUBCATEGORY_PER_PAGE配置,用Configuration::get('PS_SUBCATEGORY_PER_PAGE')获取,后续修改更灵活。
  • 检查getSubCategoriesWithPagination的SQL逻辑,确保它正确处理分页参数,返回对应的数据子集,这是分页功能稳定的核心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:21:49