Twig: 動的ブロック名

作成日 2011年04月12日  ·  7コメント  ·  ソース: twigphp/Twig

ブロック名にvarsを使用しても機能しません。

{%set block_name = "my_block_name"%}

{%block block_name%}
いくつかのhtml..。
{%エンドブロック%}

最も参考になるコメント

ブロック名はテンプレートの構造の一部であるため、コンパイル時に認識されている必要があります。
変数は実行時にのみ認識されます。

全てのコメント7件

block_nameは文字列'block_name'として表されるため

申し訳ありませんが、小枝で動的ブロックを作成できない、または間違った方法で使用しているとおっしゃっていますか?

あなたは正しいです、動的なブロック名はありません

動的ブロックは使用できません。 Twigユーザーのメーリングリストにユースケースを投稿してください。

コールドケースを開けてすみません^^。 動的ブロック名の恩恵を受けるユースケースに遭遇したかもしれないと思います...

私は単一テーブル継承でDoctrineを使用しています(基本抽象クラス= Article、News + FaqはArticleを拡張します)。

次に、ニュースとよくある質問を作成できるようにフォームクラスを作成しました。 ただし、すべてのフォームで同じ小枝テンプレートが使用されます。 次に、ここで説明するように、フィールドテンプレート(article.productなど)をカスタマイズする必要があり

問題は、使用するフォームによってフィールドの名前が変わることです。 名前はnews_productまたはfaq_productのいずれかになるため、フォームフィールドを次のようにカスタマイズして、繰り返しを避けることができると便利です。

{%- block '_'~type~'_product_widget' -%} ... {% endblock %}

いくつかの調査の後、getBlockPrefixを使用して異なるフォームタイプクラスでフォームのプレフィックスを強制することでこれを解決しました。これにより、すべてのフォームが同じフィールド名を持ち、article_productを簡単にカスタマイズできます。

public function getBlockPrefix(){ return 'article'; }

だから、誰かを助けるかもしれないこのユースケースを文書化したかっただけです...

ブロック名はテンプレートの構造の一部であるため、コンパイル時に認識されている必要があります。
変数は実行時にのみ認識されます。

このページは役に立ちましたか?
0 / 5 - 0 評価