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 に答える