2017-04-02 28 views
1

我用我的自定义主题覆盖了Sylius的主题,到目前为止工作正常。我在app/themes/myCustomTheme中创建了一个新主题,并覆盖了例如/SyliusShopBundle/views/中的树枝模板。Sylius:如何修改/自定义app.js?

现在我想覆盖位于vendor/sylius/sylius/src/Sylius/Bundle/ShopBundle/Resources/private/js/的一般app.js。例如。上,而不是18行:

$('.ui.accordion').accordion(); 

我想用一个不同的选择来初始化手风琴:

$('.my-custom-accordion').accordion(); 

假设这是我想在整个JavaScript代码做的唯一变化。什么是最好和最有效的方式来做到这一点?我希望在有Sylius版本更新时尽可能减少冲突,因此尽可能少地触碰文件。当然,不需要自己重写整个javascript功能。

我能想到的不同的方式来做到这一点,但我希望有一个更好的一个:

  1. 复制的一切。将所有的UiBundle & ShopBundle javascript代码复制到我的主题并修改必要的部分。更新全局gulpfile以不再使用vendor/sylius/sylius/src/Sylius/Bundle/ShopBundle/Gulpfile.js中的gulp文件,而是使用重复的/myCustomTheme/SyliusShopBundle/Gulpfile.js。下行:重复的代码,JavaScript更新不再可能。
  2. 添加自定义路径到现有的gulp文件。更新vendor/sylius/sylius/src/Sylius/Bundle/ShopBundle/Gulpfile.js中的gulp文件,这意味着删除包含app.jsvendorShopPath + 'Resources/private/js/**'的行,而是引用不包含app.js的所有单个文件,并引用我的主题文件夹中的自定义app.js。缺点:对gulp文件的更改可能会被下一次更新覆盖。

如何有效地修改/定制/扩展Sylius中现有的JavaScript代码?

回答

1

我解决了这个问题,我在我的包(AppBundle)中创建了一个自定义的gulpfile,并以“admin”和“shop”的相同方式将其添加到全局gulp文件中。之后,您可以将自定义的app.js包含在布局或任何模板中。在我的情况下,我修改了Product/show.html.twig以添加我的自定义.js:

{% block javascripts %} 
{{ parent() }} 

{% include '@SyliusUi/_javascripts.html.twig' with {'path': 'assets/app/js/app.js'} %} 
{% endblock %} 
+0

谢谢您的回答!如果我正确理解了你的话,那么你在现有的app.js之上添加了自定义app.js的附加功能,对吧?如果我想添加额外的JavaScript,那么您的工作流程似乎是一个很好的解决方案,但是如果我想更新/修改现有的内容呢? – chaenu

+0

如果您使用与sylius'js中使用的相同的函数名称,则会覆盖/替换这些函数。 如果有人有我更好的想法,我打开。 –