नियम जोड़ें। नियम Magento2


10

नियमों में नया नियम कैसे जोड़ें। js? मैंने एक्स्ट्रा-रूल्स बनाए हैं। js

define(
[
    'jquery',
    'Magento_Ui/js/lib/validation/validator'
], function ($, validator) {
    "use strict";
    return validator.addRule('phoneNO',
        function (value) {
            return value.length > 9 && value.match(/^(\(?(0|\+44)[1-9]{1}\d{1,4}?\)?\s?\d{3,4}\s?\d{3,4})$/);
        },
        $.mage.__('Please specify a valid phone number')
    );
});

इस नियम को नियम.जजों में कैसे मिलाएं?

जवाबों:


21

न्यूनतम आयु की जांच के लिए इनपुट क्षेत्र में चेकआउट करने के लिए एक कस्टम नियम जोड़ने के लिए यहां एक पूर्ण और वास्तविक कार्य उदाहरण दिया गया है:

निम्नलिखित सामग्री के साथ validatorवस्तु में एक मिश्रण जोड़ने के लिए अपने मॉड्यूल में एकjjs-config.js बनाएं Namespace/Modulename/view/frontend/requirejs-config.js:

var config = {
    config: {
        mixins: {
            'Magento_Ui/js/lib/validation/validator': {
                'Namespace_Modulename/js/validator-mixin': true
            }
        }
    }
};

Namespace/Modulename/view/frontend/web/js/validator-mixin.jsनिम्न सामग्री के साथ अपने मॉड्यूल फ़ोल्डर में एक js स्क्रिप्ट बनाएँ :

define([
    'jquery',
    'moment'
], function ($, moment) {
    'use strict';

    return function (validator) {

        validator.addRule(
            'validate-minimum-age',
            function (value, params, additionalParams) {
                return $.mage.isEmptyNoTrim(value) || moment(value, additionalParams.dateFormat).isBefore(moment().subtract(params.minimum_age, 'y'));
            },
            $.mage.__("Sorry, you don't have the age to purchase the current articles.")
        );

        return validator;
    };
});

उपयोग

यदि आप अपने चेकआउट शिपिंग पते में एक इनपुट फ़ील्ड सम्मिलित करने के लिए एक Magento PHP प्लगइन का उपयोग करना चाहते हैं और इस फ़ील्ड की सामग्री को उस कस्टम नियम से मान्य करें जिसे आपने पहले जोड़ा था, तो यहां एक नमूना कोड है:

निम्न सामग्री के साथ अपने मॉड्यूल di.xmlके etc/frontendफ़ोल्डर में एक फ़ाइल बनाएँ :

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">    
    <type name="Magento\Checkout\Block\Checkout\LayoutProcessor">
        <plugin name="CheckoutLayoutProcessor" type="Namespace\Modulename\Plugin\Block\Checkout\LayoutProcessor" />
    </type>
</config>

फिर LayoutProcessor.phpफ़ाइल को app/code/Namespace/Modulename/Plugin/Block/Checkout/LayoutProcessor.phpनिम्न सामग्री के साथ बनाएं , कृपया इसे अपनी आवश्यकताओं के लिए अपडेट करें:

<?php
/**
 * diglin GmbH - Switzerland
 *
 * @author      Sylvain Rayé <support **at** diglin.com>
 * @category    diglin
 * @package     diglin
 * @copyright   Copyright (c) diglin (http://www.diglin.com)
 */

namespace MyNamespace\Modulename\Plugin\Block\Checkout;

use MyNamespace\Modulename\Helper\AgeValidation;

/**
 * Class LayoutProcessor
 * @package MyNamespace\Modulename\Plugin\Block\Checkout
 */
class LayoutProcessor
{
    /**
     * @var \MyNamespace\Checkout\Helper\AgeValidation
     */
    private $ageValidation;
    /**
     * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface
     */
    private $timezone;
    /**
     * @var \Magento\Framework\App\Config\ScopeConfigInterface
     */
    private $scopeConfig;

    /**
     * LayoutProcessor constructor.
     *
     * @param \MyNamespace\Checkout\Helper\AgeValidation $ageValidation
     * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone
     * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
     */
    public function __construct(
        AgeValidation $ageValidation,
        \Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone,
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
    )
    {
        $this->ageValidation = $ageValidation;
        $this->timezone = $timezone;
        $this->scopeConfig = $scopeConfig;
    }

    /**
     * Checkout LayoutProcessor after process plugin.
     *
     * @param \Magento\Checkout\Block\Checkout\LayoutProcessor $processor
     * @param array $jsLayout
     *
     * @return array
     */
    public function afterProcess(\Magento\Checkout\Block\Checkout\LayoutProcessor $processor, $jsLayout)
    {
        $shippingConfiguration = &$jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']
        ['children']['shippingAddress']['children']['shipping-address-fieldset']['children'];

        // Checks if shipping step available.
        if (isset($shippingConfiguration)) {
            $shippingConfiguration = $this->processAddress(
                $shippingConfiguration
            );
        }

        return $jsLayout;
    }

    /**
     * Process provided address to contains checkbox and have trackable address fields.
     *
     * @param $addressFieldset - Address fieldset config.
     *
     * @return array
     */
    private function processAddress($addressFieldset)
    {
        $minimumAge = $this->ageValidation->getMinimumAge();
        if ($minimumAge === null) {
            unset($addressFieldset['my_dob']);
        } else {
            $addressFieldset['my_dob'] = array_merge(
                $addressFieldset['my_dob'],
                [
                    'component' => 'Magento_Ui/js/form/element/date',
                    'config' => array_merge(
                        $addressFieldset['my_dob']['config'],
                        [
                            'elementTmpl' => 'ui/form/element/date',
                            // options of datepicker - see http://api.jqueryui.com/datepicker/
                            'options' => [
                                'dateFormat' => $this->timezone->getDateFormatWithLongYear(),
                                'yearRange' => '-120y:c+nn',
                                'maxDate' => '-1d',
                                'changeMonth' => 'true',
                                'changeYear' => 'true',
                                'showOn' => 'both',
                                'firstDay' => $this->getFirstDay(),
                            ],
                        ]
                    ),
                    'validation' => array_merge($addressFieldset['my_dob']['validation'],
                        [
                            'required-entry' => true,
                            'validate-date' => true,
                            'validate-minimum-age' => $minimumAge, // custom value in year - array('minimum_age' => 16)
                        ]
                    ),
                ]
            );
        }

        return $addressFieldset;
    }

    /**
     * Return first day of the week
     *
     * @return int
     */
    public function getFirstDay()
    {
        return (int)$this->scopeConfig->getValue(
            'general/locale/firstday',
            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
        );
    }
}

संपादित करें

धन्यवाद @ एलन-तूफान आपकी व्याख्या के लिए यहां https://alanstorm.com/the-ciousious-case-of-magento-2-mixins/ और @ jisse-reitsma दिशा में लाएं

साथ ही मैगनेटो 2 डॉक http://devdocs.magento.com/guides/v2.2/javascript-dev-guide/javascript/js_mixins.html


1
मैं कोई त्रुटि मिलती है Loading failed for the <script> with source “.../validator-mixin.js"और Script error for: Namespace_Modulename/js/validator-mixin
जुरिस टॉम्स लिपाईपीस

1
validator-mixin.jsस्थान होना चाहिए:/view/frontend/web/js/validator-mixin.js
Jurģis Toms Liepi Febš

1
काम नहीं करता है, Magento 2 सिर्फ इस पर ध्यान नहीं देता है
cjohansson

@cjohansson शायद इसलिए क्योंकि यह एक Magento 2.1 और 2.2 परियोजना के लिए किया गया था। यदि आप 2.3 का उपयोग करते हैं, तो यह अब संभव नहीं है। हमारे मामले में यह मेरे द्वारा उल्लेखित संस्करण के लिए काम करता है
सिल्वेन रेए

1

मूल rules.jsएक वस्तु शाब्दिक है, जिसमें सभी नियम हैं। आप इस फ़ाइल में एक मिश्रण को जोड़कर इस ऑब्जेक्ट शाब्दिक को संशोधित कर सकते हैं। Magento डॉक्स यह कैसे करना है पर कुछ मार्गदर्शन देते हैं: Magento जावास्क्रिप्ट मिश्रण


0

यहाँ एक ही समस्या का जवाब दिया गया था: Magento 2 कस्टम सत्यापन नियम जोड़ें

इस प्रणाली को समझने के लिए एक बहुत अच्छा स्रोत यहाँ है: https://alanstorm.com/the-curious-case-of-magento-2-mixins/

और वास्तव में आप क्या करने की कोशिश कर रहे हैं, लेकिन यहाँ एक बहुत अच्छा स्रोत नहीं है: https://www.youtube.com/watch?v=0fguDL5iEd0&t=540s


0

यह मेरे लिए काम कर रहा है:

अपने मॉड्यूल में ऐप्लिकेशन / डिज़ाइन / फ्रंटेंड / विक्रेता / थीम / Magento_Ui / requjs-config.js को निम्न सामग्री के साथ जोड़ने के लिए अपने मॉड्यूल में एकjjs-config.js बनाएँ:

var config = {
    config: {
        mixins: {
            'Magento_Ui/js/lib/validation/rules': {
                'Magento_Ui/js/lib/validation/rules-mixin': true
            }
        }
    }
};

अपने मॉड्यूल फ़ोल्डर में एप्लिकेशन / डिज़ाइन / फ्रंटएंड / वेंडर / थीम / Magento_Ui / वेब / js / lib / सत्यापन / नियमों-मिक्स-इन के साथ एक js स्क्रिप्ट बनाएँ। निम्न सामग्री के साथ:

define([
    'jquery',
    'underscore',
    'moment',
    'mage/translate'
], function ($, _, moment) {
    'use strict';

    return function (validator) {
        var validators = {
            'letters-spaces-only': [
                function (value) {
                    return /^[a-zA-Z ]*$/i.test(value);
                },
                $.mage.__('Only letters and spaces.')
            ]
        };

        validators = _.mapObject(validators, function (data) {
            return {
                handler: data[0],
                message: data[1]
            };
        });

        return $.extend(validator, validators);
    };
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.