Prestashop分页跳转后分类描述丢失,咨询对应的负责控制器
Prestashop分类页分页后描述消失问题解决方案
负责该功能的控制器
你要找的核心控制器是CategoryController(默认路径为controllers/front/CategoryController.php),它继承自你找到的ProductListingFrontController.php,分类描述的加载、模板赋值逻辑默认都在该控制器的initContent方法中。
问题根因排查方向
你遇到的切换分页后描述消失、返回第一页描述也为空的问题,常见原因有两类:
- 二开/主题自定义逻辑限制了仅第一页加载分类描述:部分开发者会在
CategoryController中加入分页判断,仅当page参数为1时才将分类描述赋值给模板,你可以先在该控制器中搜索分类描述相关的赋值代码(一般对应模板变量$category.description),查看是否存在分页判断逻辑,存在的话删除该判断即可。 - AJAX分页逻辑仅替换商品列表片段:如果你的主题开启了AJAX分页功能,默认分页请求只会返回商品列表的HTML片段,替换页面中
#js-product-list和#js-product-list-bottom节点时会直接清空原有分类描述内容,返回第一页时调用的也是AJAX接口而非整页刷新,自然也不会加载描述。
你贴出的这段分页逻辑仅处理商品分页的导航参数生成,和分类描述加载无关,无需修改:
ProductSearchQuery $query, ProductSearchResult $result ) { $pagination = new Pagination(); $pagination ->setPage($query->getPage()) ->setPagesCount( (int) ceil($result->getTotalProductsCount() / $query->getResultsPerPage()) ) ; $totalItems = $result->getTotalProductsCount(); $itemsShownFrom = ($query->getResultsPerPage() * ($query->getPage() - 1)) + 1; $itemsShownTo = $query->getResultsPerPage() * $query->getPage(); $pages = array_map(function ($link) { $link['url'] = $this->updateQueryString(array( 'page' => $link['page'] > 1 ? $link['page'] : null, )); return $link; }, $pagination->buildLinks()); //Filter next/previous link on first/last page $pages = array_filter($pages, function ($page) use ($pagination) { if ('previous' === $page['type'] && 1 === $pagination->getPage()) { return false; } if ('next' === $page['type'] && $pagination->getPagesCount() === $pagination->getPage()) { return false; } return true; }); return array( 'total_items' => $totalItems, 'items_shown_from' => $itemsShownFrom, 'items_shown_to' => ($itemsShownTo <= $totalItems) ? $itemsShownTo : $totalItems, 'current_page' => $pagination->getPage(), 'pages_count' => $pagination->getPagesCount(), 'pages' => $pages, // Compare to 3 because there are the next and previous links 'should_be_displayed' => (count($pagination->buildLinks()) > 3), ); }
修复方案
- 若不需要AJAX分页:直接在主题配置中关闭AJAX分页功能,走原生整页刷新即可解决。
- 若需要保留AJAX分页:
- 先修改
CategoryController中分页请求的响应逻辑,在返回商品列表数据的同时,额外返回分类描述的渲染结果 - 再修改前端分页的JS逻辑,收到请求后将分类描述内容插回
#js-product-list-bottom节点的对应位置
- 先修改
内容的提问来源于stack exchange,提问作者vipmysqltest
相关产品推荐
相关产品推荐

