Sorunuzdan anlaşıldığı gibi, birisi ödeme sayfasına geldiğinde her zaman bir gönderim yönteminin seçilmesini istediğinizdir.
Bunu başarmak için Magento_Checkout modülünden bir javascript'i geçersiz kılmamız gerekir.
İlk önce bir modül yaratmamız gerekiyor:
Ad alanı / Modül / registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Namespace_Module',
__DIR__
);
Ad alanı / Modül / 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>
Bundan sonra, js'yi geçersiz kılmak için requirjs oluşturmamız gerekir.
Ad / modülü / görünüşüdür / ön / requirejs-config.js
var config = {
map: {
'*': {
'Magento_Checkout/js/model/checkout-data-resolver': 'Namespace_Module/js/model/checkout-data-resolver'
}
}
};
Şimdi kopyalamak zorunda checkout-data-resolver.js
den Magento_Checkout/view/frontend/web/js/model
aynı yol ile modülündeNamespace_Module/view/frontend/web/js/model
Bundan sonra, fonksiyonun içindeki bir koşulu değiştirmemiz gerekiyor resolveShippingRates: function (ratesData)
Gönderen:
...
if (ratesData.length == 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
Kime:
...
if (ratesData.length >= 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
Ve bu, şimdi tek yapmanız gereken:
- Modülü etkinleştirin: php bin / magento module: enable Namespace_Module
- Kurulum yükseltmesini çalıştırın: php bin / magento kurulum: yükseltme
- Statik bir dağıtım yapın: php bin / magento kurulumu: statik-içerik: dağıtma