Shopware 6结账完成页如何显示订单项总数量?
Shopware 6结账完成页获取订单总数量问题解决方法
模板内快速解决(推荐)
直接过滤订单中的产品类型订单项,同时处理可能的空值:{% set totalQuantity = 0 %} {% for item in page.order.lineItems %} {# 仅计算产品类型的订单项,排除运费、折扣等非商品条目 #} {% if item.type == 'product' %} {% set totalQuantity = totalQuantity + (item.quantity ?? 0) %} {% endif %} {% endfor %} 总商品数量:{{ totalQuantity }}原因:结账完成页的
lineItems集合默认包含非产品类型条目(如折扣、运费),这类条目无有效quantity值,过滤后即可正确计算商品总数量;?? 0语法可避免空值引发的计算错误。直接使用Order内置总数量属性
Shopware的OrderEntity原生提供totalQuantity字段,该字段是所有商品订单项的数量总和,可直接调用:{{ page.order.totalQuantity }}若该属性返回空,说明页面加载时未获取此字段,需扩展页面加载逻辑:
- 在插件中创建事件订阅者,监听
CheckoutFinishPageLoadedEvent:<?php declare(strict_types=1); namespace YourPlugin\Subscriber; use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria; use Shopware\Storefront\Page\Checkout\Finish\CheckoutFinishPageLoadedEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class CheckoutFinishPageSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ CheckoutFinishPageLoadedEvent::class => 'onCheckoutFinishPageLoaded', ]; } public function onCheckoutFinishPageLoaded(CheckoutFinishPageLoadedEvent $event): void { $order = $event->getPage()->getOrder(); if (!$order) { return; } $criteria = new Criteria([$order->getId()]); $criteria->addAssociation('lineItems'); $criteria->addField('totalQuantity'); $loadedOrder = $event->getSalesChannelContext()->getContext()->getRepository('order')->search($criteria, $event->getSalesChannelContext()->getContext())->first(); if ($loadedOrder) { $event->getPage()->setOrder($loadedOrder); } } } - 在插件的
services.xml中注册订阅者:<service id="YourPlugin\Subscriber\CheckoutFinishPageSubscriber"> <tag name="kernel.event_subscriber"/> </service>
- 在插件中创建事件订阅者,监听
内容的提问来源于stack exchange,提问作者Auhona
相关产品推荐
相关产品推荐

