Как я понял из вашего вопроса, вы хотите всегда выбирать способ доставки, когда кто-то заходит на страницу оформления заказа.
Чтобы добиться этого, нам нужно переопределить JavaScript из модуля Magento_Checkout.
Перво-наперво, нам нужно создать модуль:
Пространство имен / модуль / registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Namespace_Module',
__DIR__
);
Пространство имен / модуль / и т.д. / 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>
После этого нам нужно создать requirejs для переопределения этого js.
Пространство имен / модуль / просмотр / интерфейс / requirejs-config.js
var config = {
map: {
'*': {
'Magento_Checkout/js/model/checkout-data-resolver': 'Namespace_Module/js/model/checkout-data-resolver'
}
}
};
Теперь мы должны скопировать checkout-data-resolver.js
из Magento_Checkout/view/frontend/web/js/model
нашего модуля с тем же путемNamespace_Module/view/frontend/web/js/model
После этого нам нужно изменить условие внутри функции resolveShippingRates: function (ratesData)
От:
...
if (ratesData.length == 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
Для того, чтобы:
...
if (ratesData.length >= 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
...
И это все, что вам нужно сделать сейчас:
- Активируйте модуль: php bin / magento module: включите Namespace_Module
- Запустите обновление установки: php bin / magento setup: обновление
- Выполните статическое развертывание: php bin / magento setup: static-content: deploy
selectShippingMethodAction(ratesData[0]);
метода downn немного ниже в методе, после того как он ищет уже выбранные методы, поэтому он не переопределяет их.Это сделает невозможным выбор любого другого варианта доставки. Это решает проблему для меня:
источник
Нет необходимости в полном модуле для достижения этого изменения. Вы можете просто расширить модуль Checkout и переопределить его в своей теме.
Скопируйте файл JS Кассовые-данных-resolver.js
из
vendor\magento\module-checkout\view\frontend\web\js\model
для
приложения \ дизайн \ оболочка \ Пространство имен \ THEMENAME \ Magento_Checkout \ Web \ JS \ модели.
Найдите строку со следующим кодом:
if (ratesData.length == 1) {
и замените ее на:
if (ratesData.length >= 1 && !selectedShippingRate) {
источник
Что вы, вероятно, хотите сделать, это выбрать самый дешевый способ доставки по умолчанию.
В вашем модуле over-checkout-data-resolver вы можете вместо этого использовать миксин.
в методе resolShippingRates измените, как показано ниже:
источник
Хотя приведенные выше методы предлагают переопределить функции js, я бы рекомендовал использовать миксины, чтобы избежать ненужных конфликтов кода:
В вашем интерфейсе requirejs-config.js добавьте следующее:
В вашем checkout-data-resolver.js
Кроме того, вы можете скачать модуль здесь, который позволяет выбрать способ доставки и оплаты по умолчанию : Способ доставки и оплаты по умолчанию [M2]
источник
Любой, кто использует onestepcheckout, может попробовать это:
Я знаю, это выглядит глупо, но по какой-то причине добавив, что задержка действительно сработала для меня. Стоимость доставки обновляется сама по себе.
источник