You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 }}
    

    若该属性返回空,说明页面加载时未获取此字段,需扩展页面加载逻辑:

    1. 在插件中创建事件订阅者,监听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);
              }
          }
      }
      
    2. 在插件的services.xml中注册订阅者:
      <service id="YourPlugin\Subscriber\CheckoutFinishPageSubscriber">
          <tag name="kernel.event_subscriber"/>
      </service>
      

内容的提问来源于stack exchange,提问作者Auhona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:56:11