Проверка условий и положений (пользовательский модуль)
Я создал пользовательский модуль, который позволяет мне перемещать флажок "T&C" под способами оплаты и кнопкой "Разместить заказ" внутри раздела "Сводка", например:
Теперь всякий раз, когда я выбираю способ оплаты, устанавливаю флажок в Правилах и условиях и нажимаю "Оформить заказ", появляется следующее:
Я пробовал следующее, но, к сожалению, безуспешно:
Magento 2 - перемещение положения и условия положение при оформлении заказа
Полезная нагрузка Ajax после отправки заказа:
При использовании проверки без модуля содержимое полезной нагрузки (платежная информация) имеет:
extension_attributes: {agreement_ids: ["1"]}
agreement_ids: ["1"]
В то время как при использовании моего пользовательского модуля это выглядит следующим образом:
extension_attributes: {agreement_ids: [""]}
agreement_ids: [""]
Таким образом, он пуст... вероятно, в этом и заключается проблема. Как мне исправить это?
КОД
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="Vendor_Checkout" setup_version="1.0.0">
<sequence>
<module name="Magento_Checkout"/>
</sequence>
</module>
</config>
Checkout_index_index.xml
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<head>
<css src="Vendor_Checkout::css/checkout.css"/>
</head>
<body>
<!-- Disabling the T&C checkbox under payment methods -->
<referenceBlock name="checkout.root">
<arguments>
<argument name="jsLayout" xsi:type="array">
<item name="components" xsi:type="array">
<item name="checkout" xsi:type="array">
<item name="children" xsi:type="array">
<item name="steps" xsi:type="array">
<item name="children" xsi:type="array">
<item name="billing-step" xsi:type="array">
<item name="children" xsi:type="array">
<item name="payment" xsi:type="array">
<item name="children" xsi:type="array">
<item name="payments-list" xsi:type="array">
<item name="children" xsi:type="array">
<item name="before-place-order" xsi:type="array">
<item name="componentDisabled" xsi:type="boolean">true</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</argument>
</arguments>
</referenceBlock>
<!-- Moving terms and conditions after payment methods -->
<referenceBlock name="checkout.root">
<arguments>
<argument name="jsLayout" xsi:type="array">
<item name="components" xsi:type="array">
<item name="checkout" xsi:type="array">
<item name="children" xsi:type="array">
<item name="steps" xsi:type="array">
<item name="children" xsi:type="array">
<item name="billing-step" xsi:type="array">
<item name="children" xsi:type="array">
<item name="payment" xsi:type="array">
<item name="children" xsi:type="array">
<item name="afterMethods" xsi:type="array">
<item name="children" xsi:type="array">
<item name="agreements" xsi:type="array">
<item name="component" xsi:type="string">Magento_CheckoutAgreements/js/view/checkout-agreements</item>
<item name="sortOrder" xsi:type="string">100</item>
<item name="displayArea" xsi:type="string">before-place-order</item>
<item name="dataScope" xsi:type="string">checkoutAgreements</item>
<item name="provider" xsi:type="string">checkoutProvider</item>
</item>
<item name="agreements-validator" xsi:type="array">
<item name="component" xsi:type="string">Magento_CheckoutAgreements/js/view/agreement-validation</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</argument>
</arguments>
</referenceBlock>
<!-- Moving place order button to sidebar -->
<referenceBlock name="checkout.root">
<arguments>
<argument name="jsLayout" xsi:type="array">
<item name="components" xsi:type="array">
<item name="checkout" xsi:type="array">
<item name="children" xsi:type="array">
<item name="sidebar" xsi:type="array">
<item name="children" xsi:type="array">
<item name="summary" xsi:type="array">
<item name="children" xsi:type="array">
<item name="children" xsi:type="array">
<item name="component" xsi:type="string">Vendor_Checkout/js/view/payment</item>
<item name="config" xsi:type="array">
<item name="template" xsi:type="string">Vendor_Checkout/button</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</argument>
</arguments>
</referenceBlock>
</body>
</page>
Web/template/button.html
<!-- ko if: (isVisible()) -->
<div class="actions-toolbar-trigger" id="place-order-trigger-wrapper">
<button type="button" class="button action primary" id="place-order-trigger" value="Place Order" >
<span data-bind="i18n: 'Place Order'">Place Order</span>
</button>
</div>
<!-- /ko -->
Web/js/view/payment.js
define(
[
'jquery',
'ko',
'Magento_Checkout/js/view/summary',
'Magento_Checkout/js/model/step-navigator'
],
function(
$,
ko,
Component,
stepNavigator
) {
'use strict';
console.log('Running');
return Component.extend({
isVisible: function () {
return stepNavigator.isProcessed('shipping');
},
initialize: function () {
$(function() {
$('body').on("click", '#place-order-trigger', function () {
// Parse JSON here somehow?
$(".payment-method._active").find('.action.primary.checkout').trigger( 'click' );
});
});
var self = this;
this._super();
}
});
}
);
2 answers
Итак, после некоторого отсутствия я обнаружил, что приводит к тому, что соглашения не подтверждаются.
Существует этот файл под названием agreements-assigner.js
, расположенный в
Module_checkoutагрегаты/просмотр/интерфейс/веб/js/модель
В этом файле есть переменная с именем agreementForm
. Эта переменная присваивается флажку условий и соглашений. Первоначально так:
agreementForm = $('.payment-method._active div[data-role=checkout-agreements] input');
Но, конечно, я убрал флажок из его первоначального местоположения, так что этот путь к флажок больше не существует.
Если вы, например, измените переменную следующим образом:
agreementForm = $('div[data-role=checkout-agreements] input');
В файле .js можно установить флажок "Ваши соглашения о выписке"! Теперь ваш заказ может быть успешно размещен.
Довольно простое исправление. Я пытался исправить это с помощью custom.js и прочего, и полностью контролировал этот файл...;)
ПРИМЕЧАНИЕ: не редактируйте основной файл напрямую. Скорее скопируйте его в свой модуль или тему и измените файл в соответствии с вашими потребности.
Добавьте следующую строку в свой пользовательский модуль
Приложение/код/Magento/Соглашения о выезде/просмотр/интерфейс/веб/js/просмотр/оформление заказа-соглашения.линия js № - с 48 по 77
/**
* build a unique id for the term checkbox
*
* @param {Object} context - the ko context
* @param {Number} agreementId
*/
getCheckboxId: function (context, agreementId) {
var paymentMethodName = '',
paymentMethodRenderer = context.$parents[1];
// corresponding payment method fetched from parent context
if (paymentMethodRenderer) {
// item looks like this: {title: "Check / Money order", method: "checkmo"}
paymentMethodName = paymentMethodRenderer.item ?
paymentMethodRenderer.item.method : '';
}
return 'agreement_' + paymentMethodName + '_' + agreementId;
},
/**
* Init modal window for rendered element
*
* @param {Object} element
*/
initModal: function (element) {
agreementsModal.createModal(element);
}
});
});
Изменение в файле Magento/CheckoutAgreements/view/frontend/web/template/checkout/checkout-agreements.html
Заменить'id': 'agreement_' + agreementId,
в строке 14
С
'id': $parent.getCheckboxId($parentContext, agreementId),
Заменить
<label data-bind="attr: {'for': 'agreement_' + agreementId}">
С
<label data-bind="attr: {'for': $parent.getCheckboxId($parentContext, agreementId)}">
В строке 18
Ссылка: https://github.com/magento/magento2/commit/14b9b9813c9a16c0c45505885503cfb71bc4eb8d