답변:
귀하의 질문에서 알 수 있듯이 누군가가 결제 페이지에 올 때 항상 배송 방법을 선택하고 싶다는 것입니다.
이를 위해서는 Magento_Checkout 모듈에서 자바 스크립트를 재정의해야합니다.
먼저, 모듈을 만들어야합니다 :
네임 스페이스 / 모듈 /registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Namespace_Module',
__DIR__
);
네임 스페이스 / 모듈 /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>
그런 다음 j를 재정의하기 위해 requirejs를 만들어야합니다.
네임 스페이스 / 모듈 /view/frontend/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;
}
...
그게 다야, 지금해야 할 일은 :
selectShippingMethodAction(ratesData[0]);
하고 이미 선택된 메소드를 찾은 후에 메소드에서 조금 더 낮추는 호출을 추가하여 메소드를 무시하지 않습니다.
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;
}
if (ratesData.length >= 1) {
//set shipping rate if we have only one available shipping rate
if(!selectedShippingRate) {
selectShippingMethodAction(ratesData[0]);
}
}
이 변경을 달성하기 위해 전체 모듈이 필요하지 않습니다. Checkout 모듈을 간단하게 확장하고 테마에서 재정의 할 수 있습니다.
JS 파일 체크 아웃 - 데이터 resolver.js 복사
에서
vendor\magento\module-checkout\view\frontend\web\js\model
하는
응용 프로그램 \ 디자인 \ 프론트 엔드 \ 네임 스페이스 \ THEMENAME \ Magento_Checkout \ 웹 \ JS \ 모델.
다음 코드로 줄을 찾아서 다음으로 바꿉니다
if (ratesData.length == 1) {
.
if (ratesData.length >= 1 && !selectedShippingRate) {
아마도 가장 저렴한 배송 방법은 기본적으로 선택하는 것입니다.
모듈 오버라이드 체크 아웃 데이터 리졸버에서 옵션으로 믹스 인을 대신 사용할 수 있습니다.
var config = {
map: {
'*': {
'Magento_Checkout/js/model/checkout-data-resolver':'MyModule_Checkout/js/view/checkout-data-resolver'
}
}
}
resolveShippingRates 메소드에서 다음과 같이 수정하십시오.
/**
* @param {Object} ratesData
*/
resolveShippingRates: function (ratesData) {
var selectedShippingRate = checkoutData.getSelectedShippingRate(),
availableRate = false;
//Added to find the cheapest rate
var lowestRateId = _.min(_.keys(ratesData), function(k) { return ratesData[k].amount; });
if (ratesData.length === 1) {
//set shipping rate if we have only one available shipping rate
selectShippingMethodAction(ratesData[0]);
return;
}
// added to select the cheapest rate if no method selected
if(lowestRateId && !selectedShippingRate && ratesData.length > 0) {
selectShippingMethodAction(ratesData[lowestRateId]);
}
위의 방법으로 js 함수를 재정의하는 것이 좋지만 불필요한 코드 충돌을 피하기 위해 mixin을 사용하는 것이 좋습니다.
프론트 엔드 requirejs-config.js에 다음을 추가하십시오.
var config = {
config: {
mixins: {
'Magento_Checkout/js/model/checkout-data-resolver': {
'{Vendor}/{Module}/model/checkout-data-resolver': true
}
}
}
};
checkout-data-resolver.js에서
define([
'underscore',
'mage/utils/wrapper',
'Magento_Checkout/js/checkout-data',
'Magento_Checkout/js/action/select-shipping-method',
'Magento_Checkout/js/action/select-payment-method'
],function (_, wrapper, checkoutData, selectShippingMethodAction) {
'use strict';
return function (checkoutDataResolver) {
var resolveShippingRates = wrapper.wrap(
checkoutDataResolver.resolveShippingRates,
function (originalResolveShippingRates, ratesData) {
// select your shipping method here using the ratesData and selectShippingMethodAction
return originalResolveShippingRates(ratesData);
}
);
return _.extend(checkoutDataResolver, {
resolveShippingRates: resolveShippingRates
});
};
});
또는 기본 배송 및 결제 방법을 선택할 수있는 여기에서 모듈을 다운로드 할 수 있습니다. 기본 배송 및 결제 방법 [M2]