0

twig で基本テンプレートを定義する際に、ブロックを使用して、特別な通知用の領域を確保したいと考えています。あらゆる種類のもの (カレンダー、その他の情報など) を含む追加のサイドバーにすることができます。デフォルトは空にする必要がありますが、子テンプレートは拡張して埋めることができます。

<div class='special-sidebar'>ここで、ブロックが拡張されている場合はこれらすべての拡張機能を含め、含まれていない場合は何も表示しないようにしたいと考えています。基本テンプレートで包含要素を定義する方法はありますか?

{# Base template #}    
Content etc...
{% block special %} {# may be overridden by child template #}{% endblock %}

{# child template #}
{% block special %} Here, the special sidebar is filled! {% endblock %}

基本ページにはコンテンツのみが表示されます。

// base template:
Content etc...

そして子ページ:

// child template
Content etc...
<div class"special-sidebar"> Here, the special sidebar is filled! </div>

このためのhtmlをどこにどのように配置しますか? すべての子でそれを定義できますが、それは毎回正しい html を使用することを覚えておく必要があることを意味します。これをベース テンプレートに設定し、気にしないでください。しかし、ブロックがオーバーライドされていない場合、ページに空の要素は必要ありません。

4

1 に答える 1

3

コンテンツがある場合にのみ特定のブロックを表示したい場合は、このように解決できます。希望、これはあなたが探しているものです。

例 index.html.twig

{% set _block = block('dynamic') %}
{% if _block is not empty %}
    {{ _block|raw }}
{% endif %}

例 part.html.twig

{% extends "index.html.twig" %}

{% block dynamic %}
    Block content goes here.
{% endblock %}

出典: twig テンプレートにブロックが存在するかどうかを確認する方法 - Symfony2

于 2013-10-30T13:28:20.783 に答える