使用require-config.js加载所有页面上所需的文件


9

我知道如何require-config.js在自定义主题中使用,但我想myfile.js在所有页面上使用自定义javascript文件()。我应该在哪个目录中添加require-config.js以及如何使用它,以便它可以正常工作?

请不要参考Magento官方页面。


您可以在布局xml head标签内直接调用js,并且每个页面都有js。
Rakesh Jesadiya '16

谢谢您的回答。但是,如果我想使用require-config并使用它加载文件,而不是像Magento 1一样?
Anitr '16

它也支持magento 2,您可以检查module-theme文件夹的layout / default_head_block.xml文件
Rakesh Jesadiya

是的我知道。但是,我想以正确的方式使用require-config.js。
Anitr

Answers:


17

requirejs-config.js用于创建JavaScript资源映射。我们可以在以下位置找到所有需要的配置pub/static/_requirejs

据我所知,通过Require Js:using template调用我们的脚本来加载自定义脚本的正确方法。我们将使用Magento\Framework\View\Element\Template其块类创建新模板。

如果我们要在所有页面上加载js文件并且不想创建新模块,则我们的块应引用before.body.end或包含after.body.start containerdefault.xml-Magento Theme模块中。

在此处输入图片说明

应用/设计/前端/供应商/主题/ Magento_Theme /布局/default.xml

<?xml version="1.0"?>

<page layout="3columns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">

    <referenceContainer name="after.body.start">
        <block class="Magento\Framework\View\Element\Template" name="custom.js" template="Magento_Theme::custom_js.phtml"/>
    </referenceContainer>

</page>

应用/设计/前端/供应商/主题/requirejs-config.js

var config = {
    map: {
        '*': {
            customScript:'Magento_Theme/js/customscript'
        }
    }
};

应用/设计/前端/供应商/主题/Magento_Theme/web/js/customscript.js

define('jquery', function($) {

    //Your code here
    //alert('Here');

    }(jQuery)
);

我们的模板将调用我们的脚本:app / design / frontend / Vendor / Theme / Magento_Theme / templates / custom_js.phtml

<script>// <![CDATA[
    require([
        'jquery',
        'customScript'
    ], function ($, script) {
        //Your code here
        //alert('Here');
    });
    // ]]>
</script>

清除Magento缓存并运行静态内容部署: php bin/magento setup:static-content:deploy


我在上调用了脚本\app\design\frontend\Enim\blank\Magento_CatalogWidget\templates\product\widget\content\grid.phtml,但在Theme文件夹(app / design / frontend / Vendor / Theme / requirejs-config.js)中有requirejs-config.js和脚本。这个可以吗?问题是我从多个不同的地方调用脚本。
Anitr '16

您的脚本仅影响templa‌​tes\product\widget\c‌​ontent\grid.phtml调用模板的时间。
Khoa TruongDinh '16

是的,没关系-问题出在那一个:magento.stackexchange.com/questions/149019/…,我想知道这个问题是否以某种方式与requirejs调用有关。
Anitr

@KhoaTruongDinh我对此有些困惑。我尚未进行适当的测试,但是我是否认为该函数custom_js.phtml被视为常规回调,在执行其中包含的代码之后执行customscript.js?还是我需要执行in customscript.js函数中声明的代码custom_js.phtml
约书亚洪水

1
@KhoaTruongDinh我也想知道为什么Iveta的回答指出您after.body.start应该更改为before.body.end
约书亚洪水

5

Requirejs配置文件: app / code / Vendor / Module / view / frontend / requirejs-config.js

var config = {
    paths: {            
         'myfile': "Vendor_Modulename/js/myfile"
      },   
    shim: {
    'myfile': {
        deps: ['jquery']
    }
  }
} 

您的js文件应位于:app / code / Vendor / Module / view / frontend / web / js / myfile.js

现在,您可以通过以下方法在模板文件中的任何位置使用:

<srcipt>
 require(["jquery","myfile"],function($,myfile){
     $(document).ready(function(){
        //call your js here...
     })
 })
</script>

对,那是正确的。但是我问是否有人知道如何在主题文件夹中使用它,而不取决于模块-应该在整个页面上加载它,而不仅是在一个模块上。
Anitr '16

您也可以在主题文件夹中使用它,只需在上面的脚本中调用即可使用js
Rakesh Jesadiya

如果您有任何问题,请告诉我
Rakesh Jesadiya

可以,谢谢。但尽管如此,我有一些其他东西的问题:magento.stackexchange.com/questions/149019/...
Anitr

嗨,请让我知道第一步文件放在哪里?
Priya

2

使用更简单的版本deps。加载requirejs本身时(商店中的所有地方),requirejs-config.js中的依赖都将加载文件。这是您的requirejs-config.js外观的示例:

var config = {
    // When load 'requirejs' always load the following files also
    deps: [
        'common-js'
    ],

    // Library file path.
    paths: {
        'common-js': 'js/Your-File-Name'
    },

    // The rest of your config file ...

1

作为Khoa推荐的一种替代方法,这是出色的Magento开发实践,您可以将JavaScript粘贴到.phtml文件中,如下所示:

<srcipt>
require(["jquery"],function($){
 $(document).ready(function(){
    your script here...
 })
});
</script>

然后,按照Khoa的回答中所述,从default.xml链接您的phtml文件,尽管我建议将其添加到before.body.end中。然后,从copyright.phtml中调用您的JS脚本,如下所示:

<script>
jQuery(document).ready(function($) {
..call your script here ..
});
</script>

copyright.phtml会加载到每个页面上,即使在诸如checkout的页面上也会省略页脚。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.