0

好的,我不确定我是否在这里错过了一个技巧。但是我在文档或在线解决方案中找不到任何内容。基本上我试图在模板块中包含一大块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 块的内容,但我的包含在内容块内,我不能在 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 %}

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

4

2 回答 2

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 中完成所有这些工作?

于 2012-06-06T12:20:00.987 回答
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 %}
于 2012-06-05T17:23:03.950 回答