【发布时间】:2015-05-15 07:32:24
【问题描述】:
我需要加载一个页面,该页面将被“插入”到模板中——当我阅读它时,Volt 的Template Inheritance 应该可以解决问题,它确实......有点。如示例中所示,硬编码值可以正常工作 - 以下示例可以正常工作:
<!-- 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 %}
但是,同一个页面可能需要继承不同的模板,并且必须在运行时决定,因此模板的名称必须动态生成。我想到了两个选择:
- 将模板名称设置为变量并在扩展时使用它 - 这里的问题是我看不到以后可以使用它的方法。 That guy seems to have had the same problem,但既没有关于如何做的答案,也没有确认它根本不可能。
-
注册另一个函数以生成完整的字符串(例如 {% extends "../../templates/de/index.volt" %})然后编译它,例如
$compiler->addFunction('get_template', 函数 ($resolvedArgs, $exprArgs) 使用 ($volt) { 返回 $volt->getCompiler() ->compileString('{% extends "../../templates/de/index.volt" %}'); });
然后在页面中使用该功能,例如
{{ get_template() }}
{% block test %}
{{ content() }}
{% endblock %}
但是,使用该方法不会解析页面内容(例如,未显示注册的 content() 函数返回的内容)。我也对其他解决方案持开放态度(对于性能问题,使用 Twig 而不是 Volt 只是最后的手段),关于我做错了什么的建议或关于该主题的有用文章的指针。提前致谢!
【问题讨论】:
标签: php templates phalcon volt template-inheritance