Seperti yang saya mengerti dari pertanyaan Anda adalah bahwa Anda ingin selalu memiliki metode pengiriman yang dipilih ketika seseorang datang pada halaman checkout.
Untuk mencapai ini, kita perlu mengganti javascript dari modul Magento_Checkout.
Hal pertama yang pertama, kita perlu membuat modul:
Namespace / Module / registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Namespace_Module',
__DIR__
);
Namespace / Module / etc / module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Namespace_Module" setup_version="1.0.0">
<sequence>
<module name="Magento_Checkout"/>
</sequence>
</module>
</config>
Setelah ini, kita perlu membuat requirejs untuk menimpa js itu.
Namespace / Module / view / frontend / requireejs-config.js
var config = {
map: {
'*': {
'Magento_Checkout/js/model/checkout-data-resolver': 'Namespace_Module/js/model/checkout-data-resolver'
}
}
};
Sekarang kita harus menyalin checkout-data-resolver.js
dari Magento_Checkout/view/frontend/web/js/model
dalam modul kita dengan jalur yang samaNamespace_Module/view/frontend/web/js/model
Setelah itu, kita perlu mengubah kondisi di dalam fungsi resolveShippingRates: function (ratesData)
Dari:
...
if (ratesData.length == 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
Untuk:
...
if (ratesData.length >= 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
Dan hanya itu, yang harus Anda lakukan sekarang adalah:
- Aktifkan modul: modul php bin / magento: aktifkan Namespace_Module
- Jalankan upgrade pengaturan: php bin / magento setup: upgrade
- Lakukan penyebaran statis: setup bin bin / magento: static-content: deploy
selectShippingMethodAction(ratesData[0]);
turun sedikit lebih rendah dalam metode ini, setelah mencari metode yang sudah dipilih, sehingga tidak menimpa mereka.Ini akan membuat tidak mungkin untuk memilih opsi pengiriman lainnya. Ini memecahkan masalah bagi saya:
sumber
Tidak perlu seluruh modul untuk mencapai perubahan ini. Anda dapat dengan mudah memperluas modul Checkout dan menimpa di dalam tema Anda.
Salin file js checkout-data-resolver.js
dari
vendor\magento\module-checkout\view\frontend\web\js\model
ke
app \ design \ frontend \ Namespace \ ThemeName \ Magento_Checkout \ web \ js \ model.
Temukan baris dengan kode berikut:
if (ratesData.length == 1) {
dan ganti dengan:
if (ratesData.length >= 1 && !selectedShippingRate) {
sumber
Yang mungkin ingin Anda lakukan adalah memilih metode pengiriman termurah secara default.
Dalam modul Anda sambil naik checkout-data-resolver, secara opsional Anda mungkin bisa menggunakan mixin sebagai gantinya.
dalam metode resolShippingRates ubah seperti di bawah ini:
sumber
Sementara metode di atas menyarankan mengesampingkan fungsi js, saya akan merekomendasikan menggunakan mixins untuk menghindari bentrokan kode yang tidak perlu:
Di frontend Anda, needejs-config.js tambahkan yang berikut:
Di checkout-data-resolver.js Anda
Atau, Anda dapat mengunduh modul di sini yang memungkinkan Anda memilih metode pengiriman dan pembayaran default : Metode Pengiriman & Pembayaran Default [M2]
sumber
Siapa pun yang menggunakan onestepcheckout dapat mencoba ini:
Saya tahu itu terlihat bodoh, tetapi karena alasan tertentu menambahkan bahwa penundaan benar-benar berhasil untuk saya. Biaya pengiriman memperbarui sendiri seperti ini.
sumber