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
相关产品推荐
相关产品推荐

