Как отобразить и сохранить атрибуты расширения на Magento 2 Admin создать страницу заказа - PullRequest
0 голосов
/ 27 марта 2019

Я создал атрибуты расширения для заказа остальных API-сервисов в Magento 2. Также я могу отображать атрибуты в сетке заказов.

Как я могу отобразить те же атрибуты в форме администратора, создать и сохранить ее?

Может ли кто-нибудь предложить лучший подход?

Заранее спасибо

Вот мой файл extension_attributes.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
    <extension_attributes for="Magento\Checkout\Api\Data\ShippingInformationInterface">
        <attribute code="delivery_day_slot" type="string"/>
    </extension_attributes>

    <extension_attributes for="Magento\Sales\Api\Data\OrderInterface">
        <attribute code="delivery_day_slot" type="string"/>
    </extension_attributes>
</config>

И я сохраняю данные с помощью плагина

<type name="Magento\Checkout\Model\ShippingInformationManagement">
    <plugin name="NM_save_delivery_slot_in_quote" type="<Namespace>\<ModuleName>\Plugin\Checkout\Model\ShippingInformationManagement" sortOrder="1"/>
</type>

Пространство имен \ ModuleName \ Plugin \ Checkout \ Model \ ShippingInformationManagement

namespace <Namespace>\<ModuleName>\Plugin\Checkout\Model;

class ShippingInformationManagement
{
    protected $quoteRepository;

    public function __construct(
        \Magento\Quote\Model\QuoteRepository $quoteRepository,
        \Magento\Checkout\Api\Data\ShippingInformationExtensionFactory $shpExtensionFactory,
        \Psr\Log\LoggerInterface $logger
    ) {
        $this->quoteRepository = $quoteRepository;
        $this->shpExtensionFactory = $shpExtensionFactory;
        $this->logger = $logger;
    }

    /**
     * @param \Magento\Checkout\Model\ShippingInformationManagement $subject
     * @param $cartId
     * @param \Magento\Checkout\Api\Data\ShippingInformationInterface $addressInformation
     */
    public function beforeSaveAddressInformation(
        \Magento\Checkout\Model\ShippingInformationManagement $subject,
        $cartId,
        \Magento\Checkout\Api\Data\ShippingInformationInterface $addressInformation
    ) {

        $extensionAttributes = $addressInformation->getExtensionAttributes();
        $shipExtension = $extensionAttributes ? $extensionAttributes : $this->shpExtensionFactory->create();

        $payload = \file_get_contents("php://input");
        $attr = json_decode($payload, true);
        if(isset($attr["extension_attributes"])){
            $deliveryDaySlot = $attr["extension_attributes"]["delivery_day_slot"];

            $addressInformation->setDeliveryDaySlot($deliveryDaySlot);
            $quote = $this->quoteRepository->getActive($cartId);
            $quote->setDeliveryDaySlot($deliveryDaySlot);

        }

        return;
    }
}
...