আমি কেবলমাত্র কিছু শর্তে (যেমন কনফিগারেশনের উপর ভিত্তি করে) একটি প্রয়োজনীয় জাজ উপাদান প্রতিস্থাপন করতে চাই। প্রোগ্রামিয়ালি আমার মডিউলটির লোড হওয়া requirejs-config.js
বা এটির অন্য কোনও উপায়ে রোধ করার কোনও উপায় আছে কি ?
আমি কেবলমাত্র কিছু শর্তে (যেমন কনফিগারেশনের উপর ভিত্তি করে) একটি প্রয়োজনীয় জাজ উপাদান প্রতিস্থাপন করতে চাই। প্রোগ্রামিয়ালি আমার মডিউলটির লোড হওয়া requirejs-config.js
বা এটির অন্য কোনও উপায়ে রোধ করার কোনও উপায় আছে কি ?
উত্তর:
@ আরশাদ এম মন্তব্যের ভিত্তিতে আপনি একটি ডায় এক্সএমএল যুক্ত করতে পারেন:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Framework\RequireJs\Config" type="<Vendor>\<ModuleName>\RequireJs\Config"/>
</config>
এবং <বিক্রেতার> Mod <মডিউলনেম> \ প্রয়োজনীয় জেস \ কনফিগারেশন.এফপি getConfig ফাংশনকে ওভাররাইড করে আপনার শর্ত এবং মডিউলের নাম যা আপনি চান না যে প্রয়োজনীয় জজগুলি লোড করা উচিত (সম্ভবত স্কোপসিফিজইন্টারফেস থেকে):
<?php
namespace <Vendor>\<ModuleName>\RequireJs;
use Magento\Framework\Filesystem\File\ReadFactory;
use Magento\Framework\View\Asset\Minification;
use Magento\Framework\View\Asset\RepositoryMap;
class Config extends \Magento\Framework\RequireJs\Config
{
/**
* @var \Magento\Framework\RequireJs\Config\File\Collector\Aggregated
*/
private $fileSource;
/**
* @var ReadFactory
*/
private $readFactory;
/**
* @var \Magento\Framework\Code\Minifier\AdapterInterface
*/
private $minifyAdapter;
/**
* @var Minification
*/
private $minification;
/**
* @var \Magento\Framework\View\DesignInterface
*/
private $design;
public function __construct(\Magento\Framework\RequireJs\Config\File\Collector\Aggregated $fileSource, \Magento\Framework\View\DesignInterface $design, ReadFactory $readFactory, \Magento\Framework\View\Asset\Repository $assetRepo, \Magento\Framework\Code\Minifier\AdapterInterface $minifyAdapter, Minification $minification, RepositoryMap $repositoryMap)
{
parent::__construct($fileSource, $design, $readFactory, $assetRepo, $minifyAdapter, $minification, $repositoryMap);
$this->fileSource = $fileSource;
$this->readFactory = $readFactory;
$this->minifyAdapter = $minifyAdapter;
$this->minification = $minification;
$this->design = $design;
}
public function getConfig()
{
$distributedConfig = '';
$customConfigFiles = $this->fileSource->getFiles($this->design->getDesignTheme(), self::CONFIG_FILE_NAME);
foreach ($customConfigFiles as $file) {
//Your condition
if(true){
if($file->getModule() == "Vendor_ModuleName"){
continue;
}
}
/** @var $fileReader \Magento\Framework\Filesystem\File\Read */
$fileReader = $this->readFactory->create($file->getFileName(), \Magento\Framework\Filesystem\DriverPool::FILE);
$config = $fileReader->readAll($file->getName());
$distributedConfig .= str_replace(
['%config%', '%context%'],
[$config, $file->getModule()],
self::PARTIAL_CONFIG_TEMPLATE
);
}
$fullConfig = str_replace(
['%function%', '%usages%'],
[$distributedConfig],
self::FULL_CONFIG_TEMPLATE
);
if ($this->minification->isEnabled('js')) {
$fullConfig = $this->minifyAdapter->minify($fullConfig);
}
return $fullConfig;
}
}
হালনাগাদ
@ অ্যালেক্স এবং @ ড্যানিয়েলের মন্তব্যগুলির পরে: আপনি ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ প্রয়োজনীয় জেএস \ কনফিগারেশন \ ফাইল \ সংগ্রাহক \ একত্রিত থেকে getFiles এর জন্য একটি প্লাগইন তৈরি করতে পারেন, সুতরাং এই পদ্ধতির সাথে নতুন di.xML হবে:
<?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\Framework\RequireJs\Config\File\Collector\Aggregated">
<plugin name="requirejsConfigPlugin"
type="<Vendor>\<ModuleName>\Plugin\RequireJs\AfterFiles"
sortOrder="100"
/>
</type>
</config>
এবং \ <বিক্রেতার> Mod <মডিউলনাম> ug প্লাগিন \ প্রয়োজনীয় জেস \ আফার ফাইলগুলিতে আপনি নিজের অবস্থা এবং মডিউল সেট করতে পারেন যে প্রয়োজনীয় জাজগুলি লোড হবে না:
<?php
namespace <Vendor>\<ModuleName>\Plugin\RequireJs;
class AfterFiles
{
public function afterGetFiles(
\Magento\Framework\RequireJs\Config\File\Collector\Aggregated $subject,
$result
){
//Your condition
if(true) {
foreach ($result as $key => &$file) {
//Module to exclude
if ($file->getModule() == "Vendor_OtherModuleName") {
unset($result[$key]);
}
}
}
return $result;
}
}
aroundGetConfig()
বা afterGetConfig()
পদ্ধতি ব্যবহার করতে পারেন তখন আমাদের এটিকে ওভাররাইট করতে হবে না