শর্তসাপেক্ষে প্রয়োজনীয় জেএস কনফিগারেশন (লোড করা প্রয়োজন 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.