首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Shopware 6希望交付日期

Shopware 6希望交付日期
EN

Stack Overflow用户
提问于 2022-08-05 08:40:26
回答 2查看 157关注 0票数 1

有没有人知道Shopware 6有希望交付日期(用户可以选择选项,当他/她希望收到订单)在结帐实体上实现?

如果没有,是否可以使用自定义字段进行结帐(顺便说一下,我的商店是通过无头Shopware构建的)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-05 18:56:03

在Shopware 6中没有这种可能性,但是您可以使用自定义字段。下面是如何在order实体上使用自定义字段的示例。

  1. 在管理中创建一个新的自定义字段集。给它一个技术名称custom_order并分配给订单。
  2. 在集合中创建一个新的自定义字段。选择Date/time field类型,给它一个技术名称custom_order_desired_delivery_date
  3. 使用插件中的自定义模板向结帐页面添加一个专用字段。要添加它(例如,在发货日期下),请在插件中创建一个文件MyPlugin/src/Resources/views/storefront/page/checkout/confirm/confirm-shipping.html.twig
代码语言:javascript
运行
复制
{% sw_extends '@Storefront/storefront/page/checkout/confirm/confirm-shipping.html.twig' %}

{% block page_checkout_confirm_shipping_form %}
    {{ parent() }}

    <div class="my-3">
        <label class="form-label"
                for="myPluginDesiredDeliveryDate">
            Desired delivery date
        </label>
        <input type="date"
               class="form-control"
               id="myPluginDesiredDeliveryDate"
               name="myPluginDesiredDeliveryDate"
               form="confirmOrderForm">
    </div>
{% endblock %}
  1. 创建订阅服务器,以便在客户提交表单时将字段内容保存在自定义字段中。为此,创建一个文件MyPlugin/src/Subscriber/OrderConverterSubscriber.php
代码语言:javascript
运行
复制
<?php declare(strict_types=1);

namespace MyPlugin\Subscriber;

use DateTime;
use Shopware\Core\Checkout\Cart\Order\CartConvertedEvent;
use Shopware\Core\Defaults;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;

class OrderConverterSubscriber implements EventSubscriberInterface
{
    private RequestStack $requestStack;

    public function __construct(RequestStack $requestStack)
    {
        $this->requestStack = $requestStack;
    }

    public static function getSubscribedEvents(): array
    {
        return [
            CartConvertedEvent::class => 'saveDesiredDeliveryDate',
        ];
    }

    public function saveDesiredDeliveryDate(CartConvertedEvent $event): void
    {
        $orderData = $event->getConvertedCart();
        $currentRequest = $this->requestStack->getCurrentRequest();
        $desiredDeliveryDateParam = $currentRequest->request->get('myPluginDesiredDeliveryDate');

        if (!$desiredDeliveryDateParam) {
            return;
        }

        $desiredDeliveryDate = new DateTime($desiredDeliveryDateParam);
        $orderData['customFields']['custom_order_desired_delivery_date'] = $desiredDeliveryDate->format(Defaults::STORAGE_DATE_FORMAT);
        $event->setConvertedCart($orderData);
    }
}

MyPlugin/src/Resources/config/services.xml中注册订阅者

代码语言:javascript
运行
复制
<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
    <services>
        <service id="MyPlugin\Subscriber\OrderConverterSubscriber">
            <argument type="service" id="request_stack"/>
            <tag name="kernel.event_subscriber"/>
        </service>
    </services>
</container>
  1. 清除缓存。
票数 1
EN

Stack Overflow用户

发布于 2022-08-05 09:17:00

据我所知,目前还没有专门的领域。使用自定义字段是存储该附加数据的最佳方法。详细说明如何处理用户输入和持久化可能超出了此处的范围,因为有多种可能的方法,而且还取决于要向哪个签出相关实体添加自定义字段。

有一个关于如何向address实体添加自定义字段并在店面中为其输入的这个储存库 (不是我的)。当购物车转换为订单时,您必须用一个合适的事件替代在那里使用的CustomerEvents

提供一种可能的办法:

  • order实体添加自定义字段
  • 带有侦听器到添加订阅服务器CartConvertedEvent::class
  • Symfony\Component\HttpFoundation\RequestStack注入订阅服务器
  • 在侦听器方法中,使用RequestStack检索用户输入
  • 通过调用getConvertedCart从事件中获取原始有效载荷
  • 将自定义字段的数据从用户输入设置为有效负载
  • 通过调用setConvertedCart将丰富的有效负载设置为事件
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73246961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档