नियमগুলিতে বিধি যুক্ত করুন। Magento2


10

নিয়ম.জেএসগুলিতে কীভাবে নতুন বিধি যুক্ত করবেন? আমি অতিরিক্ত-নিয়ম.জেএস তৈরি করেছি

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অবজেক্টটিতে একটি মিশ্রণ যুক্ত করতে আপনার মডিউলটিতে একটি প্রয়োজনীয়js-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নিম্নলিখিত বিষয়বস্তু দিয়ে একটি জেএস স্ক্রিপ্ট তৈরি করুন :

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

, USAGE

আপনি যদি আপনার চেকআউট শিপিং ঠিকানায় কোনও ইনপুট ক্ষেত্র সন্নিবেশ করানোর জন্য এবং আপনি পূর্বে যে কাস্টম নিয়ম যুক্ত করেছেন তার সাথে এই ক্ষেত্রের সামগ্রীটি বৈধতা দিতে যদি আপনি কোনও ম্যাজেন্টো পিএইচপি প্লাগইন ব্যবহার করতে চান তবে এখানে একটি নমুনা কোড রয়েছে:

নিম্নলিখিত বিষয়বস্তু সহ আপনার মডিউলটির ফোল্ডারে একটি 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-curious-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
হ'ল

1
কাজ করে না, ম্যাজেন্টো 2 কেবল এটিকে অগ্রাহ্য করে
cjohansson

@ কেজোহানসন সম্ভবত কারণ এটি একটি ম্যাজেন্টো ২.১ এবং ২.২ প্রকল্পের জন্য করা হয়েছিল। আপনি যদি ২.৩ ব্যবহার করেন তবে এটি সম্ভবত আর সম্ভব নয়। আমাদের ক্ষেত্রে এটি আমি উল্লিখিত সংস্করণটির জন্য কাজ করেছে
সিলভাইন রায়

1

আসলটি rules.jsসমস্ত নিয়ম সহ একটি বস্তুকে আক্ষরিক প্রদান করে। আপনি এই ফাইলটিতে একটি মিশ্রণ যুক্ত করে এই বস্তুকে আক্ষরিক পরিবর্তন করতে পারেন can ম্যাজেন্টো ডক্স কীভাবে এটি করতে পারে সে সম্পর্কে কিছু গাইডেন্স দেয়: ম্যাজেন্টো জাভাস্ক্রিপ্ট মিক্সিন্স


0

এখানে একই সমস্যার উত্তর দেওয়া হয়েছিল: ম্যাজেন্টো 2 কাস্টম বৈধকরণের নিয়ম যুক্ত করুন

এই সিস্টেমটি বোঝার জন্য একটি ভাল উত্স এখানে: https://alanstorm.com/the-curious-case-of-magento-2-mixins/

এবং আপনি যা করার চেষ্টা করছেন ঠিক তা নয়, তবে এখানে একটি খুব ভাল উত্স: https://www.youtube.com/watch?v=0fguDL5iEd0&t=540s


0

এটি আমার পক্ষে কাজ করছে:

নীচের সামগ্রীর সাথে অ্যাপ্লিকেশন / ডিজাইন / ফ্রন্টএন্ড / বিক্রেতা / থিম / ম্যাজেন্টো_ইউআই / জাজেজে-কনফিগ.জেজে ভ্যালিডেটর অবজেক্টে একটি মিশ্রণ যুক্ত করতে আপনার মডিউলে একটি প্রযোজনা-কনফিগারেশন তৈরি করুন:

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

নীচের সামগ্রীর সাথে আপনার মডিউল ফোল্ডারে একটি জেএস স্ক্রিপ্ট তৈরি করুন:

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);
    };
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.