0

テンプレートに「挿入」されるページをロードする必要があります-私が読んだように、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 を使用することは、パフォーマンスの問題に対する最後の手段にすぎません)、私が間違っていることのアドバイス、またはトピックに関する有用な記事のポインターにもオープンです。前もって感謝します!

4

1 に答える 1

0

Phalcon doc: Using Partialsに記載されているように、パーシャルを使用してみてください。

于 2015-07-09T13:47:16.017 に答える