শর্তসাপেক্ষে প্রয়োজনীয় জেএস কনফিগারেশন (লোড করা প্রয়োজন js-config.js প্রোগ্রামগতভাবে?)


15

আমি কেবলমাত্র কিছু শর্তে (যেমন কনফিগারেশনের উপর ভিত্তি করে) একটি প্রয়োজনীয় জাজ উপাদান প্রতিস্থাপন করতে চাই। প্রোগ্রামিয়ালি আমার মডিউলটির লোড হওয়া requirejs-config.jsবা এটির অন্য কোনও উপায়ে রোধ করার কোনও উপায় আছে কি ?


1
আপনি কি এই সমস্যার সমাধান খুঁজে পেয়েছেন?
স্টিভেনসাগার ২৩:০৪

@ স্টিভেনসাগার দুর্ভাগ্যক্রমে নয়
ফ্যাবিয়ান শেমংলার

2
যদি আমি একটি খুঁজে পাই তবে আমি এখানে একটি উত্তর যুক্ত করব
ফ্যাবিয়ান শেমংলার

3
@ অ্যালেক্স যদি ২.২ বা ২.৩ এর সমাধান হয় তবে আমিও খুশি হব: ডি ট্যাগগুলি আপডেট করেছেন। এছাড়াও, অনুগ্রহের জন্য ধন্যবাদ!
ফ্যাবিয়ান শেমংলার

2
আপনি বিক্রেতা মধ্যে getConfig ফাংশন rewriting / Magento / ফ্রেমওয়ার্ক / RequireJs / config.php চেষ্টা করেছি অথবা আপনি requirejs লিখতে প্লাগিন প্রয়োজন requirejs.org/docs/plugins.html
আরশাদ এম

উত্তর:


5

@ আরশাদ এম মন্তব্যের ভিত্তিতে আপনি একটি ডায় এক্সএমএল যুক্ত করতে পারেন:

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

নিস! আমি মনে করি আমরা $ ফুলকনফিগ = প্যারেন্ট :: getConfig () দ্বারা এর উন্নতি করতে পারি এবং তারপরে কম কোড অনুলিপি করতে এবং পেস্ট করার জন্য $ ফুলকনফিগ পরিবর্তন করতে পারি। আপনি কি মনে করেন? এর জন্য আমাদের গিথুবে একটি মিনি-ফসস-মডিউল তৈরি করা উচিত?
অ্যালেক্স

1
অথবা $ এই-> ফাইলসোর্স-> getFiles এর পরিবর্তে আবারও লেখা যেতে পারে? শুধু বেশি কোডে অনুলিপি করা না ...
অ্যালেক্স

3
@ অ্যালেক্স আপনি শর্তযুক্ত লোড অর্জনের জন্য একটি প্লাগইন ব্যবহার করতে পারেন এবং একটি aroundGetConfig()বা afterGetConfig()পদ্ধতি ব্যবহার করতে পারেন তখন আমাদের এটিকে ওভাররাইট করতে হবে না
ড্যানিয়েল

প্রতিশ্রুতিবদ্ধ মনে হচ্ছে, আপনাকে ধন্যবাদ! আমি ইতিমধ্যে
উত্সাহিত করেছি

2
@ অ্যালেক্স আপনার পরামর্শ অনুসরণ করে আমি গিথুবে একটি ছোট মডিউল তৈরি করেছি, যেখানে আপনি ম্যাজেন্টো ব্যাকএন্ডের মাধ্যমে প্রয়োজনীয় জেসগুলি অক্ষম করতে মডিউলগুলি নির্বাচন করতে পারেন। এটি দেখুন এবং সম্ভবত github.com/MNGemignani/magento2_requirejs_disable
gemig_hol
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.