管理者の配送先住所ボックスにカスタム属性を表示するにはどうすればよいですか?


13

チェックアウトページにカスタム値を含むドロップダウンカスタムフィールドを追加しました。また、属性値をデータベースに保存しますが、注文の配送先住所には表示しません。それを表示する方法はありますか?

ここに画像の説明を入力してください

InstallSchema.php

$connection->addColumn(
                $installer->getTable('quote_address'),
                'mob_type',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table ::TYPE_TEXT,
                    'nullable' => true,
                    'default' => NULL,
                    'length' => 255,
                    'comment' => 'Mob Type'
                ]
            );
        $connection->addColumn(
                $installer->getTable('sales_order_address'),
                'mob_type',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table ::TYPE_TEXT,
                    'nullable' => true,
                    'default' => NULL,
                    'length' => 255,
                    'comment' => 'Mob Type'
                ]
            );
        $installer->endSetup();

プラグイン

use Magento\Checkout\Block\Checkout\LayoutProcessor;

class MobPlugin
{
    public function afterProcess(LayoutProcessor $subject, $jsLayout) {
        $customAttributeCode = 'mob_type';
        $customField = [
            'component' => 'Magento_Ui/js/form/element/select',
            'config' => [
                'customScope' => 'shippingAddress.custom_attributes',
                'template' => 'ui/form/field',
                'elementTmpl' => 'ui/form/element/select',
                'id' => 'drop-down',
            ],
            'dataScope' => 'shippingAddress.custom_attributes.mob_type',
            'label' => 'Mob Type',
            'provider' => 'checkoutProvider',
            'visible' => true,
            'validation' => ['required-entry' => true],
            'sortOrder' => 150,
            'id' => 'drop-down',
            'options' => [
                [
                    'value' => 'local',
                    'label' => 'Local',
                ],
                [
                    'value' => 'vip',
                    'label' => 'VIP',
                ]
            ]
        ];

        $jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']['shippingAddress']['children']['shipping-address-fieldset']['children'][$customAttributeCode] = $customField;

        return $jsLayout;
    }
}

ここに画像の説明を入力してください

etc / di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Checkout\Model\ShippingInformationManagement">
        <plugin name="save_custom_field" type="Namespace\CustomModule\Plugin\Checkout\SaveAddressInformation" />
    </type>

</config>

SaveAddressInformation.php

class SaveAddressInformation
{
    protected $quoteRepository;
    public function __construct(
        \Magento\Quote\Model\QuoteRepository $quoteRepository
    ) {
        $this->quoteRepository = $quoteRepository;
    }
    /**
     * @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
    ) {
        $shippingAddress = $addressInformation->getShippingAddress();
    $shippingAddressExtensionAttributes = $shippingAddress->getExtensionAttributes();
    if ($shippingAddressExtensionAttributes) {
        $customField = $shippingAddressExtensionAttributes->getMobType();
        $shippingAddress->setMobType($customField);
    }

    }
}

ここに画像の説明を入力してください Refe拡張機能

上記のプラグインは正常に機能し、値をquote_addressテーブルに保存します。オーダービューページとメールテンプレートにもカスタム属性を表示したい。前もって感謝します



あなたの例はmagento2.2.3で動作しません
Jigs Parmar

確認できるように問題を共有してください
Magento2 Devloper

ゲストのチェックアウトが有効であるとき、私は電子メールIDを取得する方法
Ketan Borada

見積もりと注文オブジェクトを返します
Magento2 Devloper

回答:


4

システム構成に移動します

Stores -> Configuration -> Customers -> Customer Configuration -> Address Templates

[アドレステンプレート]の[HTMLの検索]セクションで、システム値のチェックボックスをオフにして、次のコードを追加します。必要に応じて属性コードを変更できます。

メールテンプレートでは、同じアドレス形式[HTMLアドレス形式]が機能します。

{{depend mob_type}}Mob_Type: {{var mob_type}}{{/depend}}

php bin/magento cache:clean表示されない場合は実行します。

属性は、注文ビューページと注文メールにも表示されます。

上記は両方の住所に表示されますが、配送のみに表示する場合は、SMSアドレスのみを配送先住所テーブル(sales_order_address and quote_address)に入力する必要があります。楽しい

テーブルビュー-

ここに画像の説明を入力してください

結果-

ここに画像の説明を入力してください


配送先住所のみに保存するにはどうすればよいですか?
Magento2 Devloper

イベントを追加する必要があります。-またはこれは便利かもしれmagento.stackexchange.com/questions/138902/...
ジャップM2開発

4

私のアプローチで試してください。質問で説明されているモジュールを考慮に入れます。

  1. 質問に示されているのと同じモジュールを使用しました。変化なし

  2. 参照しているインストール済みの参照拡張機能(SMS拡張機能)

システム構成に移動します

ストア->構成->顧客->顧客構成->アドレステンプレート

[アドレステンプレート]の[HTMLの検索]セクションで、システム値のチェックボックスをオフにして、次のコードを追加します。必要に応じて属性コードを変更できます。

メールテンプレートの場合、同じアドレス形式[HTMLアドレス形式]が機能します。

{{depend mob_type}}Mob_Type: {{var mob_type}}{{/depend}}

ここに画像の説明を入力してください

キャッシュをクリアする必要がある場合があります。

php bin/magento cache:clean表示されない場合に実行

属性は、注文ビューページと注文メールにも表示されます。

ここに画像の説明を入力してください


ご回答ありがとうございます。配送先住所エリアでのみディスプレイを管理する方法
Magento2デベロッパー

配送先住所についてのみ、システム構成を作成する必要がありますhtml_for_shippingMagento/sales/view/adminhtml/templates/order/view/info.phtml、ラインの下に見つけること$block->getFormattedAddress( $order->getShippingAddress() );への変更 $block->getFormattedShippingAddress( $order->getShippingAddress() );でのinfo.phpファイル、あなただけのアドレスの書式設定を出荷するための新しい方法を作成することができます。フォーマットメソッド「html」のパラメーターを「html_for_shipping」に変更できます。「html_for_shipping」は、配送先住所フォーマットの新しいシステム構成値になります。
サンディップ

突然動作しません。SMSの詳細の上に順番に表示されません。何か案が?
Magento2デベロッパー

私は、これは、@ sandip..Butそれは表示されません....私助けてくださいしようとした
Vishali Mariappanを

3

属性が正しく保存されている場合、アドレステンプレートに属性を追加する必要があります。これらは

ストア->構成->顧客->顧客構成->アドレステンプレート

最後に次のようなものを追加できます。

{{depend mob_type}}, Mob. Type: {{var mob_type}}{{/depend}}

テンプレートのタイプに応じて、<br/>新しい行の作成に使用できます。


配送先住所のみを表示したいのですが、注文表示ページでも管理できますか?
Magento2デベロッパー

これらのテンプレートはどこでも使用されます。フロントエンド、バックエンド、pdf、電子メール...属性が配送先住所にのみ保存されている場合、そこにのみ表示されます
Langley


動作していません。どこにも表示しません。- nimb.ws/9cnpHW
Magento2 Devloper

こんにちは@Langley答えてくれてありがとう、iamは請求先住所でのみこれを取得し、配送先住所では表示せず、両方の場所で表示したいと思います。
shivashankar m

2

私はこのようなことを行うだろう:にそれを追加quoteしてsales_order、次のコードが使用からデータを作業(また、既存のDBテーブルを更新する必要がある場合、InstallSchemaが新しいDBのテーブルに使用されなければならないのupgradeSchemaスクリプトを使用してみてください)

namespace Vendor\Module\Setup;

use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;

class UpgradeSchema implements UpgradeSchemaInterface
{
    public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();

        $quoteAddressTable = 'quote';
        $orderTable = 'sales_order';

        //Quote address table
        $setup->getConnection()
            ->addColumn(
                $setup->getTable($quoteAddressTable),
                'mob_type',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                    'length' => 255,
                    'comment' =>'Mob type'
                ]
            );
        //Order address table
        $setup->getConnection()
            ->addColumn(
                $setup->getTable($orderTable),
                'mob_type',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                    'length' => 255,
                    'comment' =>'Mob type'

                ]
            );

        $setup->endSetup();
    }
}

更新

次のようにmixin jsを作成します。

requirejs-config.js

var config = {
    config: {
        mixins: {
            'Magento_Checkout/js/action/set-shipping-information': {
                '<YourNamespace_YourModule>/js/action/set-shipping-information-mixin': true
            }
        }
    }
};

その set-shipping-information-mixin.js

/*jshint browser:true jquery:true*/
/*global alert*/
define([
    'jquery',
    'mage/utils/wrapper',
    'Magento_Checkout/js/model/quote'
], function ($, wrapper, quote) {
    'use strict';

    return function (setShippingInformationAction) {

        return wrapper.wrap(setShippingInformationAction, function (originalAction) {
            var shippingAddress = quote.shippingAddress();
            if (shippingAddress['extension_attributes'] === undefined) {
                shippingAddress['extension_attributes'] = {};
            }

            shippingAddress['extension_attributes']['custom_field'] = shippingAddress.customAttributes['custom_field'];
            // pass execution to original action ('Magento_Checkout/js/action/set-shipping-information')
            return originalAction();
        });
    };
});

また、あなたが持つべきextension_attributes.xmlYour_Module/etc/、次のコードで

<?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\Quote\Api\Data\AddressInterface">
        <attribute code="custom_field" type="string" />
    </extension_attributes>
</config>

必要に応じて変更を行います(属性コード、タイプなど。これにより、カスタム情報が配送情報に追加されます。


しかし、このフィールドデータをテーブルに保存するにはどうすればコードを共有できますか?ありがとう
Magento2 Devloper

di.xmlファイルでプラグインをどのように定義したか教えてください。
Vlad Patru

保存フィールドコードを更新して正常に機能していることを確認しますが、注文の配送先住所エリアに表示する方法は?
Magento2デベロッパー

アップデートしてくれてありがとう。でも私の質問を見てください。完了したものを保存しますが、注文ビューとメールテンプレートには表示されません。ありがとう
Magento2 Devloper

フィールドは、ショーはであるgetShippingAddress()私は、このコードを追加した理由thatsのは、アドレス自体に設定されているすべてのフィールドを取得する機能は、配送先住所自身にあなたの属性を追加する必要があります
ヴラドPatru
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.