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?
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;
}
}
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);
}
}
}
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
checkout
module
shipping-address
Magento2 Devloper
sumber
sumber
Jawaban:
Buka Konfigurasi Sistem
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.
Jalankan
php bin/magento cache:clean
jika 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. NikmatiTampilan tabel -
Hasil -
sumber
Coba dengan pendekatan saya. Memperhatikan modul pertimbangan sebagaimana dijelaskan dalam pertanyaan.
Gunakan modul yang sama yang ditunjukkan dalam pertanyaan. tidak ada perubahan
Ekstensi referensi terpasang yang Anda referensikan (ekstensi SMS)
Buka Konfigurasi Sistem
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.
mungkin diperlukan untuk menghapus cache.
Jalankan
php bin/magento cache:clean
jika tidak ditampilkanAtribut akan ditampilkan di halaman tampilan pesanan dan juga pesan email.
sumber
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() );
Dalaminfo.php
file, 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.Jika atribut disimpan dengan benar, Anda perlu menambahkan atribut ke templat alamat. Ini dapat ditemukan di
Anda dapat menambahkan sesuatu seperti:
Bergantung pada tipe templat, Anda dapat menggunakan
<br/>
untuk membuat garis baru.sumber
Saya akan melakukannya seperti ini: menambahkannya ke
quote
dansales_order
dan 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)MEMPERBARUI
Buat mixin js sebagai berikut:
di
requirejs-config.js
itu
set-shipping-information-mixin.js
Juga Anda harus memiliki
extension_attributes.xml
diYour_Module/etc/
dengan kode berikutbuat perubahan jika diperlukan (kode atribut, jenis, dll. ini akan menambahkan atribut khusus Anda ke informasi pengiriman
sumber
di.xml
file?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