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 %}

但是,同一页面可能需要继承不同的模板,并且必须在运行时决定,因此模板的名称必须动态生成。我想到了两个选择:

  • 将模板名称设置为变量并在扩展时使用它 - 这里的问题是我没有看到之后使用它的方法。那家伙似乎也遇到了同样的问题,但既没有关于如何做的答案,也没有确认根本不可能。
  • 注册另一个函数以生成完整的字符串(例如 {% 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() 函数返回的内容)。我也对其他解决方案持开放态度(对于性能问题,使用 Twig 而不是 Volt 只是最后的手段),关于我做错了什么的建议或关于该主题的有用文章的指针。提前致谢!

4

1 回答 1

0

尝试使用 Phalcon 文档中记录的部分:使用部分

于 2015-07-09T13:47:16.017 回答