Checkoutで追加の隠しフィールド検証を出荷する


7

チェックアウトの配送セクションに非表示フィールドを追加しました。フィールドが表示されている場合-検証は機能しますが、非表示にした場合-検証がありません。

[次へ]ボタンをクリックして、支払いから配送に進むのを防ぎ、エラーメッセージまたはユーザーへの警告を表示する必要があります。

LayoutProcessorを使用してこれを作成する方法はありますか?

または、この目的のために私のモジュールでmagento検証を拡張するには?

他のバージョンも役に立ちます。

UPD:多分これは答えに役立つでしょう。現在、チェックアウト時に電子メールフィールドと同様の検証を実行しようとしています。アイデアは次です。カスタムフォーム(別のフォーム内にあるメールフィールドなど)を作成し、このドキュメント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;
    }
}

あなたのMagentoバージョンはどちらですか?
Khoa TruongDinh

@KhoaTruongDinh 2.1.0
ホワイトインプ

配送フォームにチェックボックスを作成し、ログインしたユーザーにはチェックボックスを表示しましたが、ゲストには非表示にしており、検証に問題はありません。私はoyenetwork.com/articles/…フォローしてフォームをカスタマイズしました。このプロセスは、カスタマイズにLayoutProcessorを使用します。お役に立てば幸いです
Ekta Puri

そうでない場合は、もう少し詳細を
記入して

@EktaPuriありがとうございます。「大江」にも従いましたが、少し異なるタスクがあります。ユーザーが日付と時間の範囲を決定することを意味するボタンの1つをチェックすることにより、配達日を選択します(つまり、利用可能な日付と時間の範囲のセットをユーザーに提案することを意味します)。このデータを処理して検証する必要があります。そのため、データを隠しフィールド(複数可)に入れて処理することにしました。そして「ログに記録されたユーザーに表示される」について:ユーザーがすでにシステムに有効なアドレスを追加している場合-表示フィールドは非表示になります。したがって、ここにフィールドを配置する必要があります['shippingAddress'] ['children'] ['shippingAdditional'] ['children'] ['delivery_date']
white-imp

回答:


4

この目的のために、検証プロセスを変更した独自の要素を簡単に作成できます。拡張機能view/base/web/js/form/element/custom.jsで、次の内容の新しいファイルを作成します。

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
            };
        }
    });
});

次に、LayoutProcessorPluginで、 'component'の値を新しく作成した要素に変更します。

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

このようにして、Abstract要素を拡張し、フィールドの可視性チェックなどを削除することで「validate」メソッドを変更できます。この例では、エラーメッセージがアラートとして表示されていますが、何でも使用できます。お役に立てば幸いです。


ヤロスラフ、本当にありがとう!非常にいっぱい!
ホワイトインプ

Yaroslav、ユーザーがログインしたときに検証を機能させる方法を知っていますか?配送フォームはパラメータが設定済みの住所ブロックに置き換えられましたが、ページに非表示のフィールドが存在し、検証は行われません。検証がまったくないようです。
ホワイトインプ

これに加えて、「vendor / magento / module-ui / view / base / web / js / form / element / abstract.js」ファイルを見ることができ、コアでどのように機能するかを確認でき、いつでもそれをオーバーライドできます要件に応じて。
Kapil Yadav
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.