ম্যাজেন্টো 2 এর প্রয়োজনীয় জেএস ভিত্তিক অবজেক্ট সিস্টেমগুলিতে "মিক্সিনস" নামে একটি বৈশিষ্ট্য রয়েছে। একটি ম্যাজেন্টো 2 মিক্সিন কোনও সফ্টওয়্যার ইঞ্জিনিয়ার সাধারণত মিক্সিন / বৈশিষ্ট্য হিসাবে বিবেচনা করবেন না । পরিবর্তে, কোনও ম্যাজেন্টো 2 মিক্সিন আপনাকে মূল প্রোগ্রাম দ্বারা সেই বস্তু / মানটি ব্যবহার করার আগে একটি প্রয়োজনীয় জেএস মডিউল দ্বারা প্রত্যাবর্তিত বস্তু / মানটি সংশোধন করার অনুমতি দেয়। আপনি এটির মতো একটি ম্যাজেন্টো 2 মিক্সিন কনফিগার করেন (একটি প্রয়োজনীয়js-config.js ফাইলের মাধ্যমে)
var config = {
'config':{
'mixins': {
//the module to modify
'Magento_Checkout/js/view/form/element/email': {
//your module that will do the modification
'Pulsestorm_RequireJsRewrite/hook':true
}
}
}
};
তারপরে, আপনার hook.js
(বা আপনার কনফিগার করা প্রয়োজনীয় জেএস মডিউলটি থাকা) দরকার,
define([], function(){
console.log("Hello");
return function(theObjectReturnedByTheModuleWeAreHookingInto){
console.log(theObjectReturnedByTheModuleWeAreHookingInto);
console.log("Called");
return theObjectReturnedByTheModuleWeAreHookingInto;
};
});
একটি ফাংশন ফিরে। আপনি সংশোধন করতে চান "মডিউল" এর একটি রেফারেন্স পেরিয়ে ম্যাজেন্টো এই ফাংশনটিকে কল করবে। আমাদের উদাহরণে এটি প্রয়োজনীয় জেএস মডিউল দ্বারা প্রত্যাবর্তিত বস্তু হবে Magento_Checkout/js/view/form/element/email
। এটি কোনও ফাংশন, এমনকি স্কেলারের মানও হতে পারে (প্রয়োজনীয় জেএস মডিউলটি কী দেয় তার উপর নির্ভর করে)।
এই সিস্টেমটি ডাকা হবে বলে মনে হচ্ছে mixins
কারণ এটি যদি আপনার প্রয়োজনীয় প্রয়োজন জেএস মডিউল দ্বারা প্রত্যাবর্তিত বস্তুটি extend
পদ্ধতিটিকে সমর্থন করে তবে আপনাকে আচরণের মতো মিক্সিন তৈরি করতে দেয় ।
define([], function(){
'use strict';
console.log("Hello");
var mixin = {
ourExtraMethod = function(){
//...
}
};
return function(theObjectReturnedByTheModuleWeAreHookingInto){
console.log(theObjectReturnedByTheModuleWeAreHookingInto);
console.log("Called");
return theObjectReturnedByTheModuleWeAreHookingInto.extend(mixin);
};
});
যাইহোক, সিস্টেম নিজেই মডিউল অবজেক্ট তৈরির একমাত্র উপায়।
উপস্থাপিকা সমাপ্ত - কেউ কি জানেন যে কীভাবে ম্যাজেন্টো এই কার্যকারিতাটি কার্যকর করেছে? RequireJS ওয়েবসাইটটি মিশ্রণের কথা উল্লেখ করেছে বলে মনে হয় না (যদিও গুগল মনে করে আপনি প্রয়োজনীয় জেএস এর প্লাগইন পৃষ্ঠাটি চাইতে পারেন )।
requirejs-config.js
ফাইলগুলির বাইরে , ম্যাজেন্টো 2 এর মূল জাভাস্ক্রিপ্ট কেবল mixins
তিনটি ফাইলে উল্লেখ করেছে
$ find vendor/magento/ -name '*.js' | xargs ack mixins
vendor/magento/magento2-base/lib/web/mage/apply/main.js
73: if (obj.mixins) {
74: require(obj.mixins, function () {
79: delete obj.mixins;
vendor/magento/magento2-base/lib/web/mage/apply/scripts.js
39: if (_.has(obj, 'mixins')) {
41: data[key].mixins = data[key].mixins || [];
42: data[key].mixins = data[key].mixins.concat(obj.mixins);
43: delete obj.mixins;
vendor/magento/magento2-base/lib/web/mage/requirejs/mixins.js
5:define('mixins', [
24: * Adds 'mixins!' prefix to the specified string.
30: return 'mixins!' + name;
76: * Iterativly calls mixins passing to them
80: * @param {...Function} mixins
84: var mixins = Array.prototype.slice.call(arguments, 1);
86: mixins.forEach(function (mixin) {
96: * Loads specified module along with its' mixins.
102: mixins = this.getMixins(path),
103: deps = [name].concat(mixins);
111: * Retrieves list of mixins associated with a specified module.
114: * @returns {Array} An array of paths to mixins.
118: mixins = config[path] || {};
120: return Object.keys(mixins).filter(function (mixin) {
121: return mixins[mixin] !== false;
126: * Checks if specified module has associated with it mixins.
137: * the 'mixins!' plugin prefix if it's necessary.
172: 'mixins'
173:], function (mixins) {
237: deps = mixins.processNames(deps, context);
252: queueItem[1] = mixins.processNames(lastDeps, context);
mixins.js
ফাইলটি একটি RequireJS প্লাগ ইন উপস্থিত হতে পারে (উপর ভিত্তি করে !...
মন্তব্য উল্লেখ করেছে - এই অধিকার হয়) কিন্তু এটা না 100% পরিষ্কার যখন main.js
বা scripts.js
Magento দ্বারা প্রার্থনা করা হয়, বা কীভাবে কাস্টম mixins
কনফিগারেশন থেকে এটা তোলে requirejs-config.js
শ্রোতা / হুক সিস্টেমের মধ্যে উপরে বর্ণিত.
এই "সিস্টেমটি কীভাবে প্রয়োগ / প্রয়োগ করা / আর্কিটেটেড করা হয়েছিল" কেন একটি "মিক্সিন" প্রয়োগ করা যেতে পারে বা না করা যেতে পারে তার দিকে নজর রেখেই কী কারোর ব্যাখ্যা রয়েছে?
mixins
কনফিগারেশনx-magento-init
এবংdata-mage-init
কনফিগারেশনগুলি কী করে? যেমন - আপনার উপরের উদাহরণে, এমনpath/to/configuration-modifier
কোনও কলব্যাকও ফেরত দেবে যা কনফিগারেশন ডেটা সংশোধন করতে পারে? অথবা অন্য কিছু?