テンプレートに「挿入」されるページをロードする必要があります-私が読んだように、Voltのテンプレート継承はそのトリックを行う必要があり、そうです...ちょっと。例に示すように、ハードコードされた値は正常に機能します。次の例は機能します。
<!-- Template -->
<div id="site_content">
{% block test %}
{% endblock %}
</div>
テンプレートを継承するページ:
{% extends "../../templates/de/index.volt" %}
{% block test %}
{{ content() }} {# this is a registered volt function that outputs the generated content #}
{% endblock %}
ただし、同じページが別のテンプレートを継承する必要があり、それは実行時に決定する必要があるため、テンプレートの名前は動的に生成する必要があります。私には2つの選択肢がありました:
- テンプレート名を変数に設定し、拡張時に使用します。ここでの問題は、後でそれを使用する方法が見当たらないことです。あの人も同じ問題を抱えていたようですが、どうすればいいのかという答えも、まったく不可能であるという確認もありません。
別の関数を登録して完全な文字列を生成し (例: {% extends "../../templates/de/index.volt" %})、それをコンパイルします。
$compiler->addFunction('get_template', function ($resolvedArgs, $exprArgs) use ($volt) { return $volt->getCompiler() ->compileString('{% extends "../../templates/de" /index.volt" %}'); });
次に、ページでその機能を使用します。
{{ get_template() }}
{% block test %}
{{ content() }}
{% endblock %}
ただし、その方法を使用すると、ページのコンテンツが解析されません (たとえば、登録された content() 関数によって返されるコンテンツは表示されません)。私は他の解決策 (Volt の代わりに Twig を使用することは、パフォーマンスの問題に対する最後の手段にすぎません)、私が間違っていることのアドバイス、またはトピックに関する有用な記事のポインターにもオープンです。前もって感謝します!