न्यूनतम आयु की जांच के लिए इनपुट क्षेत्र में चेकआउट करने के लिए एक कस्टम नियम जोड़ने के लिए यहां एक पूर्ण और वास्तविक कार्य उदाहरण दिया गया है:
निम्नलिखित सामग्री के साथ 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
Loading failed for the <script> with source “.../validator-mixin.js"
औरScript error for: Namespace_Modulename/js/validator-mixin
।