Kasse Versand zusätzliche Validierung versteckter Felder

7

Ich habe dem Versandbereich der Kasse ein verstecktes Feld hinzugefügt. Wenn das Feld sichtbar ist - die Validierung funktioniert, aber wenn ich es ausgeblendet habe - fehlt eine Validierung.

Sie müssen verhindern, dass der Versand weiter zur Zahlung erfolgt, indem Sie auf die Schaltfläche "Weiter" klicken und eine Fehlermeldung oder eine Benachrichtigung für den Benutzer anzeigen.

Gibt es eine Möglichkeit, dies über LayoutProcessor zu machen?

Oder um die Magento-Validierung in meinem Modul zu diesem Zweck zu erweitern?

Andere Versionen werden ebenfalls hilfreich sein.

UPD: Vielleicht ist dies hilfreich für die Antwort. Im Moment wird versucht, eine Validierung ähnlich dem E-Mail-Feld an der Kasse durchzuführen. Die Idee ist als nächstes. Erstellen Sie ein benutzerdefiniertes Formular (wie ein E-Mail-Feld in einem separaten Formular) und überprüfen Sie es gemäß diesem Dokument http://devdocs.magento.com/guides/v2.0/howdoi/checkout/checkout_form.html#template

<?php

namespace Modules\Deliverydate\Model\Checkout;

class LayoutProcessorPlugin
{

    /**
     * @param \Magento\Checkout\Block\Checkout\LayoutProcessor $subject
     * @param array $jsLayout
     * @return array
     */
    public function afterProcess(
        \Magento\Checkout\Block\Checkout\LayoutProcessor $subject,
        array  $jsLayout
    ) {

        $jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']
        ['shippingAddress']['children']['shipping-address-fieldset']['children']['delivery_slot'] = [
            'component' => 'Magento_Ui/js/form/element/abstract',
            'config' => [
                'customScope' => 'shippingAddress',
                'template' => 'ui/form/field',
//                'elementTmpl' => 'ui/form/element/date',
                'options' => [],
                'id' => 'enteredSlot'
            ],
            'dataScope' => 'shippingAddress.enteredSlot',
            'label' => 'Delivery Slot',
            'provider' => 'checkoutProvider',
            'visible' => false,
            'validation' => [
//                'required-entry' => true,
                'validate-no-empty' => true,
            ],
            'sortOrder' => 1,
            'id' => 'enteredSlot'
        ];

        return $jsLayout;
    }
}
weiß-imp
quelle
Welches ist genau Ihre Magento-Version?
Khoa TruongDinh
@ KhoaTruongDinh 2.1.0
White-Imp
Ich habe ein Kontrollkästchen im Versandformular erstellt und es ist für angemeldete Benutzer sichtbar, aber für Gäste ist es versteckt, und ich habe keine Probleme mit der Validierung. Ich folgte oyenetwork.com/articles/… , um mein Formular anzupassen. Dieser Prozess verwendet LayoutProcessor zur Anpassung. hoffe das hilft
Ekta Puri
Wenn nicht, geben Sie bitte einige weitere Details
Ekta Puri
@EktaPuri Danke. Auch folgte "Oye", habe aber eine etwas andere Aufgabe. Der Benutzer wählt das Lieferdatum aus, indem er eine der Schaltflächen aktiviert, die bedeuten, dass er Datum und Zeitbereich bestimmt (dies bedeutet, dass ich dem Benutzer die verfügbaren Datums- und Zeitbereiche vorschlage). Ich muss mit diesen Daten umgehen und sie validieren. Aus diesem Grund habe ich beschlossen, Daten in versteckte Felder (oder Felder) zu legen und sie dann zu verarbeiten. Und zu "Sichtbar für angemeldeten Benutzer": Wenn der Benutzer bereits seine gültige Adresse zum System hinzugefügt hat, wird das sichtbare Feld unsichtbar. Also müssen Felder hier platziert werden ['Versandadresse'] ['Kinder'] ['Versandzusatz'] ['Kinder'] ['Lieferdatum']
White-Imp

Antworten:

4

Zu diesem Zweck können Sie einfach ein eigenes Element mit geändertem Validierungsprozess erstellen. Erstellen Sie in Ihrer Erweiterung eine neue Datei view/base/web/js/form/element/custom.jsmit folgendem Inhalt:

define([
    'Magento_Ui/js/form/element/abstract',
    'Magento_Ui/js/lib/validation/validator'
], function (Abstract, validator) {
    'use strict';

    return Abstract.extend({
        validate: function () {
            var value   = this.value(),
                result  = validator(this.validation, value, this.validationParams),
                message = result.message,
                isValid = result.passed;

            this.error(message);
            this.bubble('error', message);

            if (!isValid) {
                this.source.set('params.invalid', true);
                alert('Please, specify a delivery date');
            }

            return {
                valid: isValid,
                target: this
            };
        }
    });
});

Ändern Sie dann in LayoutProcessorPlugin den Wert 'component' in das neu erstellte Element:

'component' => 'Modules_Deliverydate/js/form/element/custom'

Auf diese Weise können Sie das Abstract-Element erweitern und die "validate" -Methode ändern, indem Sie die Sichtbarkeitsprüfung für Felder usw. entfernen. In diesem Beispiel wird die Fehlermeldung als Warnung angezeigt, Sie können jedoch alles verwenden, was Sie möchten. Hoffe es wird helfen.

Jaroslaw Rogoza
quelle
Jaroslaw, vielen Dank! Sehr hepfull!
White-Imp
Yaroslav, wissen Sie, wie die Validierung funktioniert, wenn der Benutzer angemeldet ist? Versandformular durch Adressblock mit bereits eingerichteten Parametern ersetzt, aber versteckte Felder auf der Seite vorhanden und keine Validierung erfolgt. Scheint, als ob eine Validierung überhaupt nicht vorhanden wäre.
White-Imp
Darüber hinaus sehen Sie die Datei "vendor / magento / module-ui / view / base / web / js / form / element / abstract.js". Dort können Sie sehen, wie sie im Kern funktioniert, und Sie können sie jederzeit überschreiben nach Anforderungen.
Kapil Yadav