Validierung der Allgemeinen Geschäftsbedingungen (benutzerdefiniertes Modul)

9

Ich habe ein benutzerdefiniertes Modul erstellt, mit dem ich das Kontrollkästchen "AGB" unter die Zahlungsmethoden und die Schaltfläche "Bestellung aufgeben" in der Zusammenfassung "div" verschieben kann.

Kassenansicht

Wenn ich jetzt eine Zahlungsmethode auswähle, aktivieren Sie das Kontrollkästchen in den Allgemeinen Geschäftsbedingungen und klicken Sie auf "Bestellung aufgeben". Folgendes wird angezeigt:

Fehlermeldung

Ich habe folgendes versucht, aber leider kein Glück:

Magento 2 - Position der Allgemeinen Geschäftsbedingungen an der Kasse verschieben

Die Ajax-Nutzdaten nach Auftragserteilung:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie die Kasse ohne das Modul verwenden, hat der Inhalt der Nutzdaten (Zahlungsinformationen):

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

Wenn Sie mein benutzerdefiniertes Modul verwenden, ist es wie folgt:

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

Somit ist es leer ... dies scheint wahrscheinlich das Problem zu sein. Wie behebe ich das?

CODE

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 / zahlung.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();
            }

        });


    }
);
Kondor
quelle

Antworten:

3

Nachdem ich eine Weile abwesend war, habe ich herausgefunden, warum die Vereinbarungen nicht validiert werden.

Dort heißt diese Datei agreements-assigner.js, befindet sich in

Module_CheckoutAgreements / view / frontend / web / js / model

In dieser Datei gibt es eine Variable namens agreementForm. Diese Variable ist dem Kontrollkästchen der Bedingungen und Vereinbarungen zugeordnet. Ursprünglich so:

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

Aber natürlich habe ich das Kontrollkästchen von seinem ursprünglichen Speicherort verschoben, sodass dieser Pfad zum Kontrollkästchen nicht mehr vorhanden ist.

Wenn Sie beispielsweise die Variable wie folgt ändern:

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

Die .js-Datei kann das Kontrollkästchen für Ihre Checkout-Vereinbarungen finden! Jetzt kann Ihre Bestellung erfolgreich aufgegeben werden.

Eine ziemlich einfache Lösung. Ich habe versucht, es mit benutzerdefinierten .js und so weiter zu beheben und habe diese Datei total überwacht ...;)

HINWEIS: Bearbeiten Sie die Kerndatei nicht direkt. Kopieren Sie es lieber in Ihr Modul oder Thema und ändern Sie die Datei entsprechend Ihren Anforderungen.

Kondor
quelle
@Bran, kannst du mir bitte die Version sagen?
Ravi Dudhara
0

Fügen Sie Ihrem benutzerdefinierten Modul die folgende Zeile hinzu

app / code / Magento / CheckoutAgreements / view / frontend / web / js / view / checkout-Agreements.js Zeile Nr. 48 bis 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);
        }
    });
});

Änderung in der Datei Magento / CheckoutAgreements / view / frontend / web / template / checkout / checkout-Agreements.html


'id': 'agreement_' + agreementId,
In Zeile 14 ersetzen

mit

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

Ersetzen

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

mit

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

in Zeile 18

Referenz : https://github.com/magento/magento2/commit/14b9b9813c9a16c0c45505885503cfb71bc4eb8d

lalit mohan
quelle
Ich verwende bereits die neueste Version von Magento 2 (2.2.3). In dieser Version ist der gesamte Code bereits wie erwähnt. Ist es für Sie von Nutzen, wenn ich meinen Code in meiner Antwort teilen würde?
Condor
Hallo @lalit Mohan, ich verwende Standard Magento 2.2.4 und erhalte den gleichen Fehler, sobald ich auf die Schaltfläche "Bestellung aufgeben" geklickt habe. können Sie bitte im Detail mit der Antwort erklären
jafar pinjar