0

小枝でレイアウト内の子テンプレートの名前を取得することは可能ですか?たとえば、呼び出す場合:

$app['twig']->render('index.twig');

次に、メインレイアウトであるlayout.twigで、次のように尋ねる必要があります。

if page is index.twig => include this javascript

レンダリング呼び出しで追加の変数を使用してこれを行うことはできますが、テンプレート名がすでにそれを示しているため、これは肥大化しているようです。

4

1 に答える 1

5

あなたはこれを間違った方法で見ています。多くのビューがある場合、それぞれに対してそれを行う必要があると想像してください。

{% if _self.getTemplateName() == 'index.twig' %}
    <script src="{{ asset('somescript1') }}"></script>
{% endif %}
{% if _self.getTemplateName() == 'members.twig' %}
    <script src="{{ asset('somescript2') }}"></script>
{% endif %}
{% if _self.getTemplateName() == 'news.twig' %}
    <script src="{{ asset('somescript3') }}"></script>
{% endif %}
...

このアプローチはかなり悪いと思います。メイン レイアウト ファイル (この例では「layout.html.twig」と仮定します) でできることは、ブロックを作成することです。

{% block javascripts %}
{% endblock %}

次に、ビュー ファイルで次のようにします。

{% extends 'AcmeHelloBundle::layout.html.twig' %}

....
{% block javascripts %}
<script src="asset('index.js')"></script>
{% endblock %}

基本的に、レイアウト ファイル内のブロックを新しいコンテンツでオーバーライドしています。「layout.html.twig」内に何かがある場合 (jquery など)、parent() も呼び出す必要があります。

{% extends 'AcmeHelloBundle::layout.html.twig' %}

....
{% block javascripts %}
{{ parent() }}
<script src="asset('index.js')"></script>
{% endblock %}

parent()親ブロックからもすべてのコンテンツをコピーするようにしてください。

于 2011-08-24T01:49:13.993 に答える