Xác nhận các điều khoản và điều kiện (mô-đun tùy chỉnh)


9

Tôi đã tạo một mô-đun tùy chỉnh cho phép tôi di chuyển hộp kiểm T & C bên dưới các phương thức thanh toán và nút đặt hàng bên trong div tóm tắt, như vậy:

Chế độ xem thanh toán

Bây giờ, bất cứ khi nào tôi chọn phương thức thanh toán, hãy chọn hộp từ Điều khoản và Điều kiện và nhấn 'Đặt hàng', thông báo sau sẽ bật lên:

Thông báo lỗi

Tôi đã thử những điều sau đây, nhưng tiếc là không có may mắn:

Magento 2 - vị trí điều khoản và điều kiện di chuyển trong thanh toán

Tải trọng Ajax sau khi gửi đơn đặt hàng:

nhập mô tả hình ảnh ở đây

Khi sử dụng thanh toán mà không có mô-đun, nội dung của tải trọng (thông tin thanh toán) có:

extension_attributes: {agreement_ids: ["1"]}
agreement_ids: ["1"]

Trong khi sử dụng mô-đun tùy chỉnh của tôi, nó như sau:

extension_attributes: {agreement_ids: [""]}
agreement_ids: [""]

Vì vậy, nó trống rỗng ... điều này có vẻ là vấn đề. Làm thế nào để tôi sửa lỗi này?

mô-đun

<?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>

kiểm tra_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 / mẫu / 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 / lượt xem / 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();
            }

        });


    }
);

Câu trả lời:


3

Vì vậy, sau khi vắng mặt một thời gian, tôi đã tìm thấy nguyên nhân khiến các thỏa thuận không được xác thực.

Có tập tin này được gọi agreements-assigner.js, nằm ở

Module_CheckoutAgferences / view / frontend / web / js / model

Trong tập tin này, có một biến được gọi là agreementForm. Biến này được gán cho hộp kiểm của các điều khoản và thỏa thuận. Ban đầu như thế này:

agreementForm = $('.payment-method._active div[data-role=checkout-agreements] input');

Nhưng tất nhiên, tôi đã di chuyển hộp kiểm ra khỏi vị trí ban đầu của nó, vì vậy đường dẫn này đến hộp kiểm không còn tồn tại nữa.

Nếu bạn, ví dụ, thay đổi biến như sau:

agreementForm = $('div[data-role=checkout-agreements] input');

Tệp .js có thể xác định hộp kiểm thỏa thuận thanh toán của bạn! Bây giờ đặt hàng của bạn có thể được đặt thành công.

Một sửa chữa khá đơn giản. Tôi đã cố gắng sửa nó bằng cách sử dụng .js và nội dung tùy chỉnh và hoàn toàn giám sát tệp này ...;)

LƯU Ý: không chỉnh sửa tệp lõi trực tiếp. Thay vì sao chép nó vào mô-đun hoặc chủ đề của bạn và thay đổi tệp theo nhu cầu của bạn.


@Bran, bạn có thể vui lòng cho tôi biết phiên bản không?
Ravi Dudhara

0

thêm dòng sau vào mô-đun tùy chỉnh của bạn

ứng dụng / mã / Magento / CheckoutAgferences / view / frontend / web / js / view / checkout-terms.js dòng số 48 đến 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);
        }
    });
});

thay đổi trong tệp Magento / CheckoutAg Thỏa thuận / lượt xem / frontend / web / template / checkout / checkout-thỏa thuận.html

Thay thế
'id': 'agreement_' + agreementId,
trong dòng 14

với

 'id': $parent.getCheckboxId($parentContext, agreementId),

Thay thế

<label data-bind="attr: {'for': 'agreement_' + agreementId}">

với

<label data-bind="attr: {'for': $parent.getCheckboxId($parentContext, agreementId)}">

trong dòng 18

Tham khảo : https://github.com/magento/magento2/commit/14b9b9813c9a16c0c45505885503cfb71bc4eb8d


Tôi đã sử dụng phiên bản mới nhất của Magento 2 (2.2.3). Trong phiên bản này, tất cả các mã đã được như bạn đã đề cập. Có ích gì cho bạn không nếu tôi chia sẻ mã của mình trong câu trả lời của mình?
Condor

hi @lalit mohan, tôi đang sử dụng magento mặc định 2.2.4, gặp lỗi tương tự khi tôi nhấp vào nút đặt hàng. bạn có thể vui lòng giải thích chi tiết với câu trả lời
jafar pinjar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.