有没有人知道Shopware 6有希望交付日期(用户可以选择选项,当他/她希望收到订单)在结帐实体上实现?
如果没有,是否可以使用自定义字段进行结帐(顺便说一下,我的商店是通过无头Shopware构建的)?
发布于 2022-08-05 18:56:03
在Shopware 6中没有这种可能性,但是您可以使用自定义字段。下面是如何在order实体上使用自定义字段的示例。
custom_order
并分配给订单。Date/time field
类型,给它一个技术名称custom_order_desired_delivery_date
。MyPlugin/src/Resources/views/storefront/page/checkout/confirm/confirm-shipping.html.twig
:{% 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 %}
MyPlugin/src/Subscriber/OrderConverterSubscriber.php
<?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
中注册订阅者
<?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>
发布于 2022-08-05 09:17:00
据我所知,目前还没有专门的领域。使用自定义字段是存储该附加数据的最佳方法。详细说明如何处理用户输入和持久化可能超出了此处的范围,因为有多种可能的方法,而且还取决于要向哪个签出相关实体添加自定义字段。
有一个关于如何向address实体添加自定义字段并在店面中为其输入的这个储存库 (不是我的)。当购物车转换为订单时,您必须用一个合适的事件替代在那里使用的CustomerEvents
。
提供一种可能的办法:
order
实体添加自定义字段CartConvertedEvent::class
Symfony\Component\HttpFoundation\RequestStack
注入订阅服务器RequestStack
检索用户输入getConvertedCart
从事件中获取原始有效载荷setConvertedCart
将丰富的有效负载设置为事件https://stackoverflow.com/questions/73246961
复制相似问题