PrestaShop分类页分页上一页按钮href异常追加字符问题求助
PrestaShop分类页分页上一页按钮异常解决方案
第一步:定位Pagination.php链接构建逻辑
- 文件默认路径为
/classes/Pagination.php,找到生成上一页链接的代码段,重点排查三类常见错误:- 拼接参数时
substr/rtrim等字符串处理函数的长度参数配置错误,导致多截取/多拼接了单个字符 - 参数遍历拼接时循环终止条件配置错误,把末尾多余的字符变量拼入了链接
- 多语言适配逻辑异常,将单字符语言标识错误追加到了参数末尾
- 拼接参数时
- 对比官方同版本Pagination.php默认代码,若存在二次修改先回滚测试,确认是否为自定义修改导致的问题。
第二步:修正URL格式错误
你当前的页面URL本身存在语法错误:localhost/index.php?id_category=10&controller=category?resultsPerPage=18&page=2 中出现了2个?,合法URL仅第一个参数前缀用?,后续参数统一用&拼接,该格式错误会导致PrestaShop原生URL解析逻辑异常,读取resultsPerPage等参数时误将后续字符算入参数值。
- 先修正你自定义JS的参数拼接逻辑,替换第二个
?为&,修正后合法URL为localhost/index.php?id_category=10&controller=category&resultsPerPage=18&page=2,测试修正后分页链接是否恢复正常。
第三步:临时兜底修复方案
如果暂时无法定位核心代码问题,可使用JS强制覆盖方案解决,注意需在分页DOM渲染完成后执行:
document.addEventListener('DOMContentLoaded', function() { const prevBtn = document.querySelector('.pagination .prev a'); if (prevBtn && window.location.search) { // 基于当前页面URL重新生成合法链接 const urlObj = new URL(window.location.href); const currentPage = parseInt(urlObj.searchParams.get('page')) || 1; if (currentPage > 1) { urlObj.searchParams.set('page', currentPage - 1); } else { urlObj.searchParams.delete('page'); } // 直接覆盖原有异常href prevBtn.setAttribute('href', urlObj.toString()); } });
- 该方案完全绕过原生分页链接构建逻辑,不会受原有拼接错误影响。
第四步:版本适配排查
- 若你使用的是PrestaShop 1.7.8以下的旧版本,该问题属于已知的分页组件bug,可直接升级到1.7.8及以上稳定版本修复,或下载对应版本的官方Pagination.php补丁替换现有文件。
内容的提问来源于stack exchange,提问作者Magikstah
相关产品推荐
相关产品推荐

