Saya mencoba menambahkan bidang khusus di antara bagian alamat pengiriman dan metode pengiriman . Dan saya ingin nilai-nilai bidang ini disimpan dalam tabel quote
dan keduanya sales_order
pada akhirnya. Ini adalah sesuatu yang mirip dengan menambahkan bidang "komentar pesanan" tetapi bidang ini akan muncul tepat setelah bagian alamat pengiriman dan sebelum bagian metode pengiriman.
Saya membaca panduan dev Magento tentang cara menambahkan bidang khusus dan formulir khusus ke checkout dan menerapkan solusi sampai batas tertentu.
Apa yang telah saya lakukan sejauh ini:
- Memperbarui
checkout_index_index.xml
tata letak, menambahkan baruuiComponent
(wadah) di bawah item "shippingAddress". - Menambahkan elemen (bidang) yang saya butuhkan di dalam wadah.
- Ganti
/js/view/shipping.js
danshipping.phtml
dalam modul khusus saya. - Meminta wadah yang dibuat di atas
shipping.phtml
di dalam di antara alamat pengiriman checkout dan metode pengiriman (sesuatu yang mirip dengan menambahkan formulir statis baru)
Sekarang bidang yang saya inginkan sedang ditampilkan di checkout di tempat persis seperti yang saya inginkan. Namun saya telah menemui masalah di bawah ini.
Bagaimana cara mengakses nilai bidang khusus yang telah saya tambahkan di atas? Saya mencoba menyimpan nilai ke atribut ekstensi shippingAddress. Saya menambahkan mixin ke
setShippingInformationAction
dalam yang mencoba melakukan di bawah inishippingAddress['extension_attributes']['custom_field'] = shippingAddress.customAttributes['custom_field'];
Tetapi kode di atas sebenarnya gagal karena elemen tidak ada dalam shipping-address-fieldset
. Saya mungkin bisa mendapatkan nilai melalui window
elemen. Tetapi apakah ada cara untuk mengakses ini melalui Magento?
- Apakah ada cara untuk menyimpan nilai elemen ini dalam penyimpanan cache lokal (
Magento_Checkout/js/checkout-data
) sehingga nilainya akan tetap bertahan bahkan setelah refresh halaman?
Jawaban:
Berdasarkan pertanyaan Anda, saya berasumsi Anda sudah menyiapkan atribut ekstensi. Saya telah melakukan modifikasi serupa dan semoga jawaban saya membantu.
Dalam modul Kustom Anda buat file requirejs-config untuk memperpanjang prosesor pengiriman default / default
Tambahkan atribut ekstensi Anda ke payload.
Simpan Atribut ke Kutipan Anda dengan sebuah plugin (Tidak yakin apakah Anda bisa menggunakan pengamat di sini yang belum saya periksa).
di.xml
SaveAddressInformation.php
Simpan atribut ke pesanan Anda dengan Observer events.xml
SaveCustomFieldToOrder.php
sumber
map *
, gunakan mixin saja.Buat plugin untuk
\Magento\Checkout\Block\Checkout\LayoutProcessor::process
metode ini .Buat entri di di.xml di jalur ini
Buat kelas plugin di Direktori ini.
2 => Buat kelas plugin pada Direktori ini.
app/code/CompanyName\Module\Model\Plugin\Checkout
}
Setelah ini selesai, periksa halaman checkout.
sumber