在symfony4 twig模板中分离JavaScripts文件

问题描述 投票:0回答:3

我有一个问题,如何分离指定模板twig文件的加载指定javascript文件。

我得到了例如admin.html.twig,它扩展了base.html.twig,在我得到的基础上

   {% block javascripts %}

      <script src="/assets/js/core/jquery.min.js"></script>
      <script src="/assets/js/core/popper.min.js"></script>
      <script src="/assets/js/core/bootstrap-material-design.min.js"></script>
      <script src="/assets/js/plugins/perfect-scrollbar.jquery.min.js"></script>

      <script async defer src="https://buttons.github.io/buttons.j"></script>
      <script src="/assets/js/plugins/chartist.min.js"></script>
      <script src="/assets/js/plugins/bootstrap-notify.js"></script>
      <script src="/assets/js/material-dashboard.min.js"></script>
      <script src="/assets/demo/jquery.sharrre.js"></script>
      <script src="/assets/js/sparkline.js"></script>
      <script src="/assets/js/plugins/chartjs.min.js"></script>
    {% endblock %}

我得到了像dashboard.html.twig这样的下一个文件,它扩展了一个admin.html.twig文件,我的问题是在dashboard.html.twig文件中我得到了一个小写的自己的小javascript代码,这个javascript的当然使用一个jquery库,但这个库我在base.html.twig文件中加载了我的另一个自编脚本,它位于dashboard.html.twig中。

我的问题是,我怎么能加载我的小代码javascript(当然我可以将它保存在像mycode.js这样的分隔文件中)但是如何只在我使用的dashboard.html.twig文件的路径和jquery之后加载加载?因为在另一个路由器我dont need this mycode.js so I dont想把它放到javascript块中的base.html.twig文件,任何想法?

javascript symfony twig
3个回答
0
投票

你可以潜水

{% extends "admin.html.twig" %} {# use only in case your all templates are at the same places like app/Resources/views/admin.html.twig #}
{% block javascripts %}
    {{ parent() }} {# loads the parent javascript block, from the template you are extending in first line. #}
    <script src="/assets/js/dashboard/code.js"></script>
{% endblock %}

如果您尝试从另一个包中扩展模板,则可以使用此方法

{% extends "YourBundleName:Default:admin.html.twig" %} {# YourControllerRelativeName just in case your view structure is like views/Default/admin.html.twig#}
    {% block javascripts %}
        {{ parent() }} {# loads the parent javascript block, from the template you are extending in first line. #}
        <script src="/assets/js/dashboard/code.js"></script>
    {% endblock %}

为了更好地理解你应该在这里阅读一下:https://symfony.com/doc/2.8/templating.html注意: - 在文档中你应该根据你当前的版本更改版本。


1
投票

如果dashboard直接扩展admin,那么你可以执行以下操作以确保加载所有管理脚本并添加dashboard特定脚本:

{% extends "admin.html.twig" %}
{% block javascripts %}
    {{ parent() }} {# execute the parent block, thus loading all scripts in admin #}
    <script src="/assets/js/dashboard/mycode.js"></script>
{% endblock %}

0
投票

我建议以下解决方案。

  1. base.html.twig之后在{% block javascripts %}{% endblock %}中声明以下块 {% block javascript_page %}{# specific code for current page #}{% endblock %}
  2. 然后在您的页面中,您可以包含页面特定的脚本 {% extends "admin.html.twig" %}{% extends "base.html.twig" %} {% block javascript_page %} <script src="/assets/js/pages/my_page.js"></script> {% endblock %}

尽管DarkBee的回答也是正确的,但是这样你就不用担心在每一页中调用{{ parent() }}了。

© www.soinside.com 2019 - 2024. All rights reserved.