Shopware 6 SEO分页插件问题:自定义Twig循环致分页不可点击及排序异常
修复Shopware分页自定义Twig的两个问题:不可点击+排序失效
问题1:分页项不可点击
原因
- 你生成的
<a>标签是空的,没有页码文本(如1、2、3),用户看不到可交互的元素 - 错误遍历所有排序选项生成大量无效空链接,干扰了原分页的DOM结构
- 未遵循Shopware分页的标准结构(原模板用
<li>包裹分页项,包含is-active状态类等)
问题2:排序切换后无法加载正确结果
原因
- 没有正确获取当前页面的排序参数,反而硬循环所有排序选项生成链接,导致分页链接的排序参数混乱
- 生成SEO URL时未传递当前选中的排序值,切换排序后分页仍使用错误参数
修复后的完整代码
{% sw_extends '@Storefront/storefront/component/pagination.html.twig' %} {% set configService = sw.service('TanmarSeoPagination.config_service') %} {% block component_pagination_loop %} {% set currentCategoryId = page.header.navigation.active.id %} {# 获取当前排序参数,默认值设为name-asc #} {% set currentOrder = app.request.get('order', 'name-asc') %} {% set currentProperties = app.request.get('properties') %} {# 保留原分页循环逻辑,仅修改每个页码的链接参数 #} {% for i in 1..totalPages %} {% set seoParams = { navigationId: currentCategoryId, p: i, order: currentOrder {# 携带当前选中的排序参数 #} } %} {% if currentProperties %} {% set seoParams = seoParams|merge({ properties: currentProperties }) %} {% endif %} {# 重写分页项结构,保证符合Shopware标准样式与交互 #} {% block component_pagination_item %} <li class="pagination-item{% if currentPage == i %} is-active{% endif %}"> <a href="{{ seoUrl('frontend.navigation.page', seoParams) }}" class="pagination-link" aria-label="{{ 'pagination.page'|trans({ '%page%': i }) }}"> {{ i }} </a> </li> {% endblock %} {% endfor %} {% endblock %}
关键改动说明
- 移除无效循环:删除遍历所有排序选项的代码,分页链接仅基于当前用户选中的排序生成
- 正确获取参数:通过
app.request.get('order', 'name-asc')获取当前排序,确保默认值与系统一致 - 恢复标准结构:保留Shopware分页的
<li>包裹结构、状态类和页码文本,让分页项可见可点击 - 传递正确参数:将当前排序、属性参数合并到每个页码的SEO链接中,确保切换排序后分页加载对应结果
内容的提问来源于stack exchange,提问作者mlodhi
相关产品推荐
相关产品推荐

