4

カスタムメッセージをキャリアまたは特定のメソッドに追加できるようにするモジュールをmagento2で作成しようとしています。グリッドとフォームで管理セクションを正常に作成しました。現在、これをフロントエンドに表示する作業を行っています。見積もり-送料-方法の結果にデータがある場合にうまく機能するjsとテンプレートファイルを作成しました。このメッセージを評価モデルに追加するのが最も簡単な方法だと思いました。プラグインを作成しました

<type name="Magento\Quote\Model\ShippingMethodManagement">
    <plugin name="hatimeria_shippingrateinfo_add_message_to_rates"
            type="Hatimeria\ShippingRateInfo\Plugin\ShippingMethodManagement"
            sortOrder="10"
            disabled="false"/>
</type>

現在のレートのメッセージを取得し、モデルに追加します。すべてがうまく機能しますが、このデータはjson結果に出力されません。私が知ったように、magento はモデル内のすべてのデータを単純に出力するのではなく、によって定義されたデータのみを返しますShippingMethodInterface。次に、extension_attributes と呼ばれるものがあることに気付きました。ドキュメントによると、これによりメッセージを結果に追加できるはずです。ドキュメントと Magento_ProductVideo モジュールを見て、次のことを行いました。

etc/extension_attributes.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
<extension_attributes for="Magento\Quote\Api\Data\ShippingMethodInterface">
    <attribute code="rate_info" type="Hatimeria\ShippingRateInfo\Api\Quote\Data\ShippingMethodInterface" />
</extension_attributes>

インターフェイスのetc/di.xml設定を追加しました

<preference for="Hatimeria\ShippingRateInfo\Api\Quote\Data\ShippingMethodInterface" type="Hatimeria\ShippingRateInfo\Model\Rate\RateInfo" />

今クラス、最初のインターフェースHatimeria\ShippingRateInfo\Api\Quote\Data\ShippingMethodIntarface.php

namespace Hatimeria\ShippingRateInfo\Api\Quote\Data;

use Magento\Framework\Api\ExtensibleDataInterface;

/**
 * Shipping Rate Info data interface
 *
 * @api
 */
interface ShippingMethodInterface extends ExtensibleDataInterface
{

    const RATEINFO = 'rate_info';

    /**
     * Retrieve rate info message
     *
     * @return string
     */
    public function getRateInfo();

    /**
     * Set rate info message
     *
     * @param string $rateInfo
     * @return $this
     */
    public function setRateInfo($rateInfo);
}

これを実際に実装するクラスHatimeria\ShippingRateInfo\Model\Rate\RateInfo.php

namespace Hatimeria\ShippingRateInfo\Model\Rate;

use Hatimeria\ShippingRateInfo\Api\Quote\Data\ShippingMethodInterface;
use Magento\Framework\Model\AbstractExtensibleModel;

class RateInfo extends AbstractExtensibleModel implements ShippingMethodInterface
{
    /**
     * Retrieve rate info message
     *
     * @return string
     */
    public function getRateInfo()
    {
        return $this->getData(self::RATEINFO);
    }

    /**
     * Set rate info message
     *
     * @param string $rateInfo
     * @return $this
     */
    public function setRateInfo($rateInfo)
    {
        return $this->setData(self::RATEINFO, $rateInfo);
    }
}

そして、これは機能していません。レートが生成されるとき、レート モデルによって返される追加の拡張機能はありません。どんな助けでも大歓迎です。

4

1 に答える 1

2

以下の手順を試してください:

  1. 実行bin/magento setup:di:compileして、これを実装するクラスを生成ShippingMethodExtensionInterfaceします (これは、キャッシュが無効になっている場合でも、要求ごとに行われません)
  2. プラグインでインスタンス化Magento\Quote\Api\Data\ShippingMethodExtensionしてそのオブジェクトにデータを追加し、次にオブジェクト全体をエンティティに追加します$entity->setExtensionAttributes($extensionModel)
于 2015-12-11T07:34:18.747 に答える