Saya sedang membuat metode pengiriman baru dan saya perlu menambahkan kolom baru untuk checkout tarif pengiriman. Data akan datang dari pengaturan metode pengiriman kustom, misalnya deskripsi metode. Atau beberapa bidang input tempat pelanggan dapat menambahkan info (data mungkin akan disimpan dalam kutipan dan kemudian dalam urutan).
Mungkin yang paling mudah dari semuanya adalah menerapkan template dengan menggunakan
Magento_Checkout/web/template/shipping.html
Hanya butuh ini
<div data-bind="text: method.description"></div>
Masalahnya adalah saya tidak tahu cara menambahkan data khusus. Tidak cukup menambahkan ini:
public function collectRates(RateRequest $request)
{
if (!$this->isActive()) return false;
$method = $this->rateMethodFactory->create();
$method->setData('carrier', $this->getCarrierCode());
$method->setData('carrier_title', $this->getConfigData('title'));
$method->setData('method_title', $this->getConfigData('title'));
$method->setData('method', $this->getCarrierCode());
$method->setPrice($this->_price);
$method->setData('cost', $this->_price);
// custom
$method->setData('description', $this->getConfigData('description'));
$result = $this->rateResultFactory->create();
$result->append($method);
return $result;
}
Data untuk html berasal dari tingkat js (), yang mendapat data dari API:
<route url="/V1/carts/:cartId/shipping-methods" method="GET">
<service class="Magento\Quote\Api\ShippingMethodManagementInterface" method="getList"/>
<resources>
<resource ref="Magento_Cart::manage" />
</resources>
</route>
Setelah ini ada banyak langkah sementara sesuatu benar-benar dikumpulkan. saya menemukan
Magento \ Penawaran \ Model \ Keranjang \ PengirimanMethodConverter modelToDataObject ()
yang terlihat paling menjanjikan tetapi jika saya mencoba menambahkan atribut saya ke sana, tidak ada yang terjadi.
Jadi pertanyaan saya adalah, apakah sebenarnya ada cara untuk menambahkan data baru ke tarif pengiriman? Di M1 itu mungkin. Akan gila kalau M2 itu tidak mungkin.
Ada banyak alasan mengapa ini harus dimungkinkan. Sebagai contoh jika saya ingin melakukan penjemputan dalam metode toko dengan beberapa toko drop-down atau yang serupa.