2

カスタム割引のある Magento 2 でカスタム モジュールを構築しています。見積もり、見積もりアイテムから注文、注文アイテムに割引をコピーしようとしています。Magento 1 では、次のように config.xml を宣言します。

    <fieldsets>
            <sales_convert_quote_address>
                <custom_discount_amount><to_order>*</to_order></custome_discount_amount>
                <base_custom_discount_amount><to_order>*</to_order></base_custome_discount_amount>
            </sales_convert_quote_address>
            <sales_convert_quote_item>
                <custome_discount_amount><to_order_item>*</to_order_item></custome_discount_amount>
                <base_custom_discount_amount><to_order_item>*</to_order_item></base_custom_discount_amount>
            </sales_convert_quote_item>
        </fieldsets> 

そして、私のカスタム割引額がテーブルにコピーされました:sales_flat_orderそしてsales_flat_order_item期待どおりです。

fieldset.xmlMagento 2 では、次のコードで名前が付けられたファイルを作成しました。

    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Object/etc/fieldset.xsd">
    <scope id="global">
        <fieldset id="sales_convert_quote_item">
            <field name="custom_discount_amount">
                <aspect name="to_order_item" />
            </field>
            <field name="base_custom_discount_amount">
                <aspect name="to_order_item" />
            </field>
        </fieldset>         
          <fieldset id="sales_convert_quote_address">
            <field name="custom_discount_amount">
                <aspect name="to_order" />
            </field>
            <field name="base_custom_discount_amount">
                <aspect name="to_order" />
            </field>
        </fieldset>   
    </scope>
</config>

しかし、成功はありません。Magento 2 を機能させるには、他に何をする必要がありますか? 皆さん、私を助けてくれませんか?

4

3 に答える 3

4

fieldset を使用しない Magento 2 では、プラグインを使用してカスタム データを見積もりアイテムから注文アイテムにコピーすることもできます。

モジュールの etc フォルダーにdi.xmlを作成します。
アプリ/コード/ベンダー/あなたのモジュール/etc/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
    <type name="Magento\Quote\Model\Quote\Item\ToOrderItem">
        <plugin name="cedapi_quote_to_order_item" type="Vender\Yourmodule\Model\Plugin\Quote\QuoteToOrderItem"/>
    </type>
</config>

モジュールにクラスを作成し、関数を定義します。app/code/Vender/Yourmodule/Model/Plugin/Quote QuoteToOrderItem.phpファイルを
作成します

<?php
namespace Vender\Yourmodule\Model\Plugin\Quote;

use Closure;

class QuoteToOrderItem
{
    /**
     * @param \Magento\Quote\Model\Quote\Item\ToOrderItem $subject
     * @param callable $proceed
     * @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
     * @param array $additional
     * @return \Magento\Sales\Model\Order\Item
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     */
  public function aroundConvert(
        \Magento\Quote\Model\Quote\Item\ToOrderItem $subject,
        Closure $proceed,
        \Magento\Quote\Model\Quote\Item\AbstractItem $item,
        $additional = []
    ) {
        /** @var $orderItem \Magento\Sales\Model\Order\Item */
        $orderItem = $proceed($item, $additional);//result of function 'convert' in class 'Magento\Quote\Model\Quote\Item\ToOrderItem' 
        $orderItem->setCustomDesign($item->getCustomDesign());//set your required
        return $orderItem;// return an object '$orderItem' which will replace result of function 'convert' in class 'Magento\Quote\Model\Quote\Item\ToOrderItem'
    }

}
于 2016-08-07T02:46:04.957 に答える