在Magento 2中扩展/覆盖JS


34

由于Magento2使用RequireJS加载脚本,并且不再有皮肤文件夹,所以我遇到了一个问题:

如何用修改后的版本替换Magento的模块JS文件?

例如,属于Magento_Checkout扩展名的opc-checkout-method.js。据我所知,它没有在requirejs-config.js文件中定义。

我的扩展名在Magento_Checkout之后加载,因此其requirejs-config.js数据附加在生成的requirejs-config文件的末尾。

还是应该以其他方式执行此操作而不替换整个脚本?


1
我想您应该不应该替换文件,而是替换文件加载的对象上的函数。
Peter O'Callaghan

Answers:


93

没有更多的皮肤文件夹,但是您仍然可以使用主题。

作为概念证明,我op-checkout-method.js以此为例。

前提条件:

  • 安装了Magento2-beta11
  • 默认主题处于活动状态(空白)。
  • 文件pub/static夹中没有生成文件(删除pub / static / frontend文件夹)

动作:

  • op-checkout-method.js文件从其模块位置复制app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js到空白主题以app/design/frontend/Magento/blank/Magento_Checkout/web/js/opc-checkout-method.js
  • 编辑克隆文件,并在小部件的功能中添加console.log('something')或。alert('something')_createmage.opcCheckoutMethod
  • 清除浏览器缓存。

结果:

  • 加载结帐页面后,我会看到显示的警报或控制台中记录的文本。

相关资料:

如果我从cli php dev/tools/Magento/Tools/View/deploy.php(发布静态资源的脚本)运行,我的新js文件将放入pub/static/frontend/Magento/blank/en_US/Magento_Checkout/js/opc-checkout-method.js

[编辑]

我找到了一种通过模块执行此操作的方法。

[Namespace]/[Module]/view/frontend/requirejs-config.js添加此:

var config = {
    map: {
        '*': {
            'Magento_Checkout/js/opc-checkout-method':'[Namespace]_[Module]/js/opc-checkout-method'
        }
    }
};

然后[Namespace]/[Module]/view/frontend/web/js/opc-checkout-method.js使用您的内容创建文件。

为了进行测试,我克隆了原始文件,然后再次console.log_create函数中添加了一个。

还请记住为前端重新生成公共资源。


谢谢,马吕斯!在扩展内部可以做类似的事情吗?
DmitryR 2015年

我认为您不会从扩展中做到这一点。除非您完全更改了结帐模板,否则在magento 1中是不可能的。但我会寻找一种方法。
马里斯(Marius)

再次感谢Marius。我正在尝试实现自定义的结帐,该结帐会覆盖默认结帐,而我却陷入了JS覆盖。
DmitryR 2015年

1
@DmitryR。请参阅我对答案的更新。
马里斯(Marius)

现在,requirejs-config.js的位置是Vendor / Module / view / frontend / requirejs-config.js
Eugen Bogdanovich

11

这是有关扩展/替换默认JS组件的官方文档:http : //devdocs.magento.com/guides/v2.0/javascript-dev-guide/javascript/custom_js.html

欢迎反馈!


3
欢迎来到MagentoSE。如果您在此处添加了答案,而不仅仅是链接,那么此答案对将来的用户将更有用。如果将来链接断开,搜索者将找不到您所引用的信息。
AreDubya

2
这是一个公平的观点,但是当主题移动时,我们添加了301重定向,因此将404的风险降到最低。
史蒂夫·约翰逊
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.