別のテンプレートの特定のブロックの内容のみを含めたいと思います。ファイル全体ではなくブロックの内容にのみアクセスできますか?小枝:別のテンプレートのブロックを含む
私が見る限り、embed
とinclude
は常にファイル全体を含めて出力します。そしてuse
はすべてのブロックをインポートし、明らかに(?)宛先ファイルをハードコードする必要があり、テンプレートに渡される式や変数にすることはできません。あれは正しいですか?
別のテンプレートの特定のブロックの内容のみを含めたいと思います。ファイル全体ではなくブロックの内容にのみアクセスできますか?小枝:別のテンプレートのブロックを含む
私が見る限り、embed
とinclude
は常にファイル全体を含めて出力します。そしてuse
はすべてのブロックをインポートし、明らかに(?)宛先ファイルをハードコードする必要があり、テンプレートに渡される式や変数にすることはできません。あれは正しいですか?
(ウェブプロファイラで使用される)ブロックテンプレートをレンダリングするマクロhttps://twig.symfony.com/doc/2.x/tags/macro.html
を使用しても、テンプレートでこれを含めることができます。https://twig.symfony.com/doc/2.x/functions/block.html
{{ block("title", "common_blocks.twig") }}
symfonyのWebProfilerそれが良い例です:
ベンダー/ symfonyの/ symfonyの/ SRC/symfonyの/バンドル/ WebProfilerBundle /リソース/ビュー/コレクタ/ request.html.twig
各プロファイラービューテンプレートを持っています3つのブロック:
その後、必要に応じて各ブロックをレンダリングします。
ツールバー例:ベンダー/ symfonyの/ symfonyの/ SRC/symfonyの/バンドル/ WebProfilerBundle /リソース/ビュー/プロファイラー/ toolbar.html.twig
<!-- START of Symfony Web Debug Toolbar -->
<div id="sfMiniToolbar-{{ token }}" class="sf-minitoolbar" data-no-turbolink>
<a href="#" title="Show Symfony toolbar" tabindex="-1" id="sfToolbarMiniToggler-{{ token }}" accesskey="D">
{{ include('@WebProfiler/Icon/symfony.svg') }}
</a>
</div>
<div id="sfToolbarClearer-{{ token }}" class="sf-toolbar-clearer"></div>
<div id="sfToolbarMainContent-{{ token }}" class="sf-toolbarreset clear-fix" data-no-turbolink>
{% for name, template in templates %}
{% if block('toolbar', template) is defined %}
{% with {
collector: profile.getcollector(name),
profiler_url: profiler_url,
token: profile.token,
name: name,
profiler_markup_version: profiler_markup_version,
csp_script_nonce: csp_script_nonce,
csp_style_nonce: csp_style_nonce
} %}
{{ block('toolbar', template) }}
{% endwith %}
{% endif %}
{% endfor %}
<a class="hide-button" id="sfToolbarHideButton-{{ token }}" title="Close Toolbar" tabindex="-1" accesskey="D">
{{ include('@WebProfiler/Icon/close.svg') }}
</a>
</div>
<!-- END of Symfony Web Debug Toolbar -->
partials
を使用すると、より良い解決策になります。私はそれ以外のtemplates
のblock
にアクセスすることはできないと思っていますが、いつもtemplate
の部分を再利用する必要があります。私はpartial
を作成します。
パーシャルは_partials/Header.twig.html
のように、異なるパスをたどることができそして、あなたは変数{% include '_partials/Header.twig.html' with {bar: 'foo'}%}
よさそうだブロックを、レンダリング。奇妙なことに私は早くそれを見つけられませんでした。ブロックが別のファイルにある場合、そのファイルパスを変数として渡すことができますか?それとも直接文字列としてハードコードする必要がありますか? – tungsten
この例では、ファイルを変数として渡す方法とブロック名を見ることができます – albert