Bagaimana cara menunjukkan atribut khusus di kotak Alamat Pengiriman admin?

13

Saya telah menambahkan bidang khusus tarik turun di halaman checkout dengan nilai-nilai khusus. Ini berfungsi dengan baik juga menyimpan nilai atribut dalam database tetapi tidak ditampilkan dalam alamat pengiriman pesanan. Adakah yang tahu bagaimana menunjukkannya?

masukkan deskripsi gambar di sini

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();

Plugin

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;
    }
}

masukkan deskripsi gambar di sini

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);
    }

    }
}

masukkan deskripsi gambar di sini Refe Extension

Plugin di atas berfungsi dengan baik dan menyimpan nilai di tabel quote_address. Saya ingin menampilkan atribut khusus dalam tampilan halaman pesanan dan template email juga. Ada yang tahu apa yang salah dengan kode Terima kasih sebelumnya

Magento2 Devloper
sumber
contoh Anda tidak bekerja di magento2.2.3
Jigs Parmar
bagikan masalah Anda sehingga saya dapat memeriksanya
Magento2 Devloper
bagaimana saya bisa mendapatkan id email ketika checkout tamu diaktifkan
Ketan Borada
kutipan dan pesanan objek mengembalikannya
Magento2 Devloper

Jawaban:

4

Buka Konfigurasi Sistem

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

Dari Templat Alamat, bagian Cari HTML, hapus centang pada nilai sistem kotak centang, tambahkan kode berikut. Anda dapat mengubah kode atribut jika perlu.

Untuk templat email, format alamat yang sama [Format Alamat HTML] akan berfungsi.

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

Jalankan php bin/magento cache:cleanjika tidak ditampilkan.

Atribut akan ditampilkan di halaman tampilan pesanan dan juga pesan email.

di atas ditampilkan di kedua alamat tetapi jika Anda hanya ingin menunjukkan dalam pengiriman maka Anda hanya perlu memasukkan nilai SMS di tabel alamat pengiriman ( sales_order_address and quote_address) tidak menagih itu berfungsi dengan baik. Nikmati

Tampilan tabel -

masukkan deskripsi gambar di sini

Hasil -

masukkan deskripsi gambar di sini

Pengembang Japs M2
sumber
bagaimana saya bisa menyimpan hanya di alamat pengiriman?
Magento2 Devloper
Anda perlu menambahkan acara. atau yang ini mungkin berguna - magento.stackexchange.com/questions/138902/…
Pengembang Japs M2
Sebenarnya itu tidak berfungsi untuk kasus saya, saya tidak mengerti bagaimana variabel dapat merujuk ke ekstensi attrbute yang sudah disimpan dalam tabel quote_address & sales_order_address. Sepertinya saya perlu mengganti dua templat
info.phtml
4

Coba dengan pendekatan saya. Memperhatikan modul pertimbangan sebagaimana dijelaskan dalam pertanyaan.

  1. Gunakan modul yang sama yang ditunjukkan dalam pertanyaan. tidak ada perubahan

  2. Ekstensi referensi terpasang yang Anda referensikan (ekstensi SMS)

Buka Konfigurasi Sistem

Toko -> Konfigurasi -> Pelanggan -> Konfigurasi Pelanggan -> Template Alamat

Dari Templat Alamat, bagian Cari HTML, hapus centang pada nilai sistem kotak centang, tambahkan kode berikut. Anda dapat mengubah kode atribut jika perlu.

Untuk templat email, format alamat yang sama [format Alamat HTML] akan berfungsi.

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

masukkan deskripsi gambar di sini

mungkin diperlukan untuk menghapus cache.

Jalankan php bin/magento cache:cleanjika tidak ditampilkan

Atribut akan ditampilkan di halaman tampilan pesanan dan juga pesan email.

masukkan deskripsi gambar di sini

sandip
sumber
Terima kasih atas jawaban Anda. bagaimana kami mengelola tampilan hanya di area alamat pengiriman?
Magento2 Devloper
Anda mungkin harus membuat lebih banyak konfigurasi sistem, karena alamat pengiriman hanya sebagai html_for_shipping. Magento/sales/view/adminhtml/templates/order/view/info.phtml, temukan $block->getFormattedAddress( $order->getShippingAddress() );perubahan baris di bawah ini menjadi $block->getFormattedShippingAddress( $order->getShippingAddress() );Dalam info.phpfile, Anda dapat membuat metode baru hanya untuk pemformatan alamat pengiriman. Anda dapat mengubah parameter metode format 'html' menjadi 'html_for_shipping', di mana 'html_for_shipping' akan menjadi nilai konfigurasi sistem baru Anda untuk format alamat pengiriman.
sandip
tiba-tiba itu tidak berfungsi. tidak menampilkan saya di atas rincian SMS secara berurutan. ada ide?
Magento2 Devloper
Saya mencoba ini @ sandip..Tapi itu tidak bisa ditampilkan .... Tolong bantu saya
Vishali Mariappan
3

Jika atribut disimpan dengan benar, Anda perlu menambahkan atribut ke templat alamat. Ini dapat ditemukan di

Toko -> Konfigurasi -> Pelanggan -> Konfigurasi Pelanggan -> Template Alamat

Anda dapat menambahkan sesuatu seperti:

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

Bergantung pada tipe templat, Anda dapat menggunakan <br/>untuk membuat garis baru.

Langley
sumber
Saya ingin hanya menampilkan alamat pengiriman dan bagaimana saya dapat mengelola juga pada halaman tampilan pesanan?
Magento2 Devloper
Template ini digunakan di mana-mana. Frontend, backend, pdf, email ... Jika atribut disimpan hanya di alamat pengiriman maka hanya akan ditampilkan di sana
Langley
ok, biarkan saya memeriksanya
Magento2 Devloper
Tidak bekerja tidak ditampilkan di mana pun. - nimb.ws/9cnpHW
Magento2 Devloper
Hai @Langley Terima kasih atas jawabannya, saya hanya mendapatkan ini di alamat penagihan yang tidak ditampilkan di alamat pengiriman, saya ingin menampilkannya di kedua tempat.
shivashankar m
2

Saya akan melakukannya seperti ini: menambahkannya ke quotedan sales_orderdan bekerja data dari sana menggunakan kode berikut (juga mencoba menggunakan skrip UpgradeSchema jika Anda perlu memperbarui tabel DB yang ada, InstallSchema harus digunakan untuk tabel DB baru)

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();
    }
}

MEMPERBARUI

Buat mixin js sebagai berikut:

di requirejs-config.js

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

itu 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();
        });
    };
});

Juga Anda harus memiliki extension_attributes.xmldi Your_Module/etc/dengan kode berikut

<?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>

buat perubahan jika diperlukan (kode atribut, jenis, dll. ini akan menambahkan atribut khusus Anda ke informasi pengiriman

Vlad Patru
sumber
tetapi bagaimana cara menyimpan data bidang ini dalam tabel, bisakah Anda membagikan kode? terima kasih
Magento2 Devloper
dapatkah Anda menunjukkan kepada saya bagaimana Anda mendefinisikan plugin Anda dalam di.xmlfile?
Vlad Patru
periksa saya perbarui kode bidang simpan dan berfungsi dengan baik tetapi bagaimana cara menampilkannya di area alamat pengiriman pesanan?
Magento2 Devloper
terima kasih atas pembaruan tetapi lihat pertanyaan saya di atas. simpan hal-hal yang dilakukan tetapi tidak ditampilkan pada tampilan pesanan dan templat email. terima kasih
Magento2 Devloper
bidang yang ada ditampilkan dengan getShippingAddress()fungsi yang membuat semua bidang diatur ke alamat itu sendiri, itu sebabnya saya menambahkan kode ini, harus menambahkan atribut Anda ke alamat pengiriman itu sendiri
Vlad Patru