Shopware 6中如何在列表页显示父商品编号?
在Shopware 6商品列表页显示变体商品的父商品编号
要实现这个需求,你需要通过扩展商品列表查询条件获取父商品数据,再通过模板修改展示父商品编号,具体步骤如下:
1. 扩展商品列表查询条件(获取父商品数据)
Shopware 6的商品列表默认不会加载父商品关联数据,因此需要通过事件订阅器添加关联查询:
创建事件订阅器类
在你的插件目录下新建 src/Subscriber/ProductListingParentNumberSubscriber.php,内容如下:
<?php namespace YourPluginNamespace\Subscriber; use Shopware\Core\Content\Product\Events\ProductListingCriteriaEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class ProductListingParentNumberSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ ProductListingCriteriaEvent::class => 'onProductListingCriteria' ]; } public function onProductListingCriteria(ProductListingCriteriaEvent $event): void { $criteria = $event->getCriteria(); // 添加父商品关联,并仅选择需要的商品编号字段 $criteria->addAssociation('parent'); $criteria->getAssociation('parent')->addSelect('productNumber'); } }
注册订阅器
在插件的 services.yaml(或 services.xml)中注册该订阅器:
services: YourPluginNamespace\Subscriber\ProductListingParentNumberSubscriber: tags: - { name: kernel.event_subscriber }
2. 修改商品列表模板展示父商品编号
通过覆盖Shopware的商品卡片模板,添加父商品编号的展示逻辑:
覆盖模板文件
在插件(或自定义主题)的 src/Resources/views/storefront/component/product/card/box-standard.html.twig 中,找到合适的位置(比如商品名称下方)添加以下代码:
{% if product.parent is not null %} <div class="product-parent-number mt-2"> {{ 'product.parentNumber'|trans({'%number%': product.parent.productNumber}) }} </div> {% endif %}
添加翻译文案
在插件的 src/Resources/snippet/storefront/zh-CN/product.json 中添加翻译:
{ "product": { "parentNumber": "父商品编号:%number%" } }
若需要英文支持,在 en-GB/product.json 中添加:
{ "product": { "parentNumber": "Parent Product Number: %number%" } }
3. 测试验证
- 清除Shopware缓存(后台设置 → 系统 → 缓存管理)
- 刷新商品列表页面,查看变体商品下方是否显示对应的父商品编号
内容的提问来源于stack exchange,提问作者Raj Rami
相关产品推荐
相关产品推荐

