मैं केवल कुछ शर्तों (उदाहरण के लिए, कॉन्फ़िगरेशन पर आधारित) पर एक आवश्यकता के घटक को बदलना चाहूंगा। क्या मेरे मॉड्यूल requirejs-config.js
या इसे प्राप्त करने के लिए एक अलग तरीके से प्रोग्राम को लोड करने से रोकने का कोई तरीका है?
मैं केवल कुछ शर्तों (उदाहरण के लिए, कॉन्फ़िगरेशन पर आधारित) पर एक आवश्यकता के घटक को बदलना चाहूंगा। क्या मेरे मॉड्यूल requirejs-config.js
या इसे प्राप्त करने के लिए एक अलग तरीके से प्रोग्राम को लोड करने से रोकने का कोई तरीका है?
जवाबों:
@ अरशद एम टिप्पणी के आधार पर, आप एक 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">
<preference for="Magento\Framework\RequireJs\Config" type="<Vendor>\<ModuleName>\RequireJs\Config"/>
</config>
और <विक्रेता> \ <मॉड्यूलनाम> \ आवश्यकताएँ \ कॉन्फिग में। अपनी स्थिति और मॉड्यूल नाम को जोड़ने के लिए getConfig फ़ंक्शन को ओवरराइड करें जो आप चाहते हैं कि लोड नहीं किया जाए (संभवतः ScopeChigigterterter से):
<?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;
}
}
अपडेट करें
@ एलेक्स और @ डैनियल की टिप्पणियों के बाद: आप मैगेंटो \ फ्रेमवर्क \ आवश्यकताएँ \ विन्यास \ फ़ाइल \ कलेक्टर \ एग्रीगेट से गेटफाइल्स के लिए एक प्लगइन बना सकते हैं, इसलिए इस दृष्टिकोण के साथ नया 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>
और \ <विक्रेता> \ <मॉड्यूलनाम> \ प्लगिन \ आवश्यकताएँ \ AfterFiles पर, आप अपनी स्थिति और मॉड्यूल सेट कर सकते हैं कि आवश्यकताएं लोड नहीं होंगी:
<?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()
और सशर्त लोडिंग को प्राप्त करने के लिए एक विधि या विधि का उपयोग कर सकते हैं, फिर हमें इसे अधिलेखित करने की आवश्यकता नहीं है