包含块的样式/脚本

时间:2012-06-05 17:07:47

标签: javascript symfony styles twig

好的,我不确定我是否错过了这里的伎俩。但我无法在文档中找到任何内容或在解决方案中找到任何内容。 基本上我试图用模板块包含一大块javascript,但样式也是如此。 我总结了模板结构:

{# base.html.twig %}
<html>
  <head>
    <title>{% block title %}Base template{% endblock %}</title>
    {% block stylesheets %}
      <link rel="stylesheet" href="{{ asset('bundles/thisBundle/css/theme.css') }}" type="text/css" media="all" />
    {% endblock %}
    {% block scripts %}{% endblock %}
  <head>
  <body>
    {% block content %}hello from base{% endblock %}
    {% block javascripts %}
    {% endblock %}
  </body>
</html>

{# index.html.twig #}
{% extends 'base.html.twig %}
{% block content %}
  {% include 'ThisBundleBundle::templatewithascript.html.twig' %}
  <p>Some content here<p>
  {% include 'ThisBundleBundle::anothertemplatewithascript.html.twig' %}
{% endblock %}

现在这是我的问题。从这个模板我想添加到javascripts / stylesheets块的内容,但我的include在内容块中,我不能在templatewithascript.html.twig中扩展index.html.twig,基本上我希望这个工作:

{# templatewithascript.html.twig #}
{% block stylesheets %}
  <link href="{{ asset('bundles/thisBundle/css/blockspecificstyle.css') }}" rel="stylesheet" type="text/css" />
{% endblock %}
{% block body %}
  <p>Click here and something happens</p>
{% endblock %}
{% block javascripts %}
  <script type="text/javascript">
    $(document).ready(function(){
      $("p").click(function(){
        $(this).hide();
      });
    });
  </script>
{% endblock %}

或者这只是一个限制,我必须在包含内容的模板中包含样式/脚本? 谢谢。 路

2 个答案:

答案 0 :(得分:1)

好的回答我自己的问题! 导入宏是我提出的答案,即:

{# index.html.twig #}
{% extends 'base.html.twig' %}
{% import 'ThisBundleBundle::templatewithascript.html.twig' as importedTemplate %}
{% block content %}
  {{ importedTemplate.content }}
{% endblock %}
{% block javascripts %}
  {{ importedTemplate.js }}
{% endblock %}

{# templatewithascript.html.twig #}
{% macro content %}
  <p>Click here and something happens</p>
{% endmacro %}
{% macro js %}
  <script type="text/javascript">
    $(document).ready(function(){
      $("p").click(function(){
        $(this).hide();
      });
    });
  </script>
{% endmacro %}
它似乎工作但不确定我是否有点弯曲规则到达那里。并且似乎应该有一种更简单的方法可以让我在templatewithascript.html.twig中完成所有这些工作?

答案 1 :(得分:0)

您可以做的是将index.html.twig转换为另一个可扩展模板,从templatewithascript.html.twig扩展并从控制器渲染:

{# templatewithascript.html.twig #}
{% extends 'ThisBundleBundle::index.html.twig' %}
...


{# index.html.twig #}
{% extends 'base.html.twig %}
{% block content %}
  {% block body %}{% endblock body %}
{% endblock content %}