3

私はsf2/twigを初めて使用しますが、どこかでポイントが欠けていると思います。

ヘッダー、2列の中央部分、およびフッターのあるレイアウトがあります。中央部分には、左側にメインコンテンツ領域があり、右側に33%のサイドバーがあります。私は小枝のテンプレート継承を使用して、コンテンツをメインエリアに配置します。

現在、コンテンツ領域が全幅を占める必要があるページのセクションがいくつかあるため、これらのセクションの右側のサイドバーは表示されません。これを実現するには、メインのコンテンツ領域に別のCSSクラスを適用する必要があります。もちろん、サイドバーのコンテンツはレンダリングしません。

のようなメインテンプレートで変数を使用でき{% if single_column_layout %}、デフォルト値がでfalse、必要に応じて子テンプレートで上書きできると便利です。しかし、私はこれで間違った方向に向かっているように感じます...

より一般的な方法では、一連のビルディングブロックで構成されるページで、ページごとに表示されるブロックと表示されないブロックをどのように制御するのが最適でしょうか。

4

2 に答える 2

4

そのために小枝ブロックの継承を使用できます。

{# layout.html.twig #}
<div id="main" class="{% block column_layout 'single-column' %}">
    {% block content %}{% endblock %}
</div>

次に、他のテンプレートで、div#mainのクラスを変更する場合は、ブロックを再実装するだけです。

{% extends "layout.html.twig" %}
{% block column_layout 'two-column' %}
{% block content %}
     content here
{% endblock %}

PD:コンテンツがほとんどないブロック{% block name content %}ショートカット構文です

于 2012-11-21T13:17:01.447 に答える
0

それは不可能だと思います。ただし、これを行うには、デフォルト値の小枝ブロックを使用できます。

私が説明します。メインの小枝に、これを置きます:

{% block parent %}
With your value to display by default
{% endblock %}

そして、子では、コンテンツを表示したくない場合は、次のようにします。

{% block parent %}{% endblock %}

しかし、この方法で問題が解決するかどうかはわかりません。

于 2012-11-21T00:17:15.010 に答える