【发布时间】:2014-05-29 03:52:05
【问题描述】:
大家好,感谢您花时间阅读本文。
我一直在使用 Phalcon 来实现高性能 JSON/XML API。 管理这个应用程序的后端曾经/仍然由一个过时的 symfony 版本驱动,但它将被 Phalcon 和 Volt 模板引擎取代。
现在我的问题如下:
想象一个基本应用程序和一个基本模板,并且应用程序是模块化的。大部分模块会由不同的团队开发,但都必须集成 niceley,从程序逻辑方面来说这不是问题。
但是想象一下: 你有一个简单的页面、一些表单、头部、导航等等。 现在有人想添加一个模块,该模块将模板块注入页脚以用于任何目的。例如在页脚中添加一个 TagCloud(用于 SEO 目的)。
这里的想法是,插件可以编辑除了它自己带来的模板文件之外的任何模板文件。
如何在初始开发后不更改基本模板的情况下实现这一点?
这个想法基本上是挂钩一个事件,为了简单起见,我们称之为 TEMPLATE_RENDER。 TEMPLATE_RENDER 被触发,为其注册的每个侦听器现在都有机会向模板添加内容,例如附加块等。所有这些都无需手动更改核心模板。
如果有办法在 Volt 中简单地将一堆模板文件添加在一起并输出编译结果就足够了。
编辑:
好的,经过一番思考,我在 Volt 中寻找的是:
Compiler#compileMultipleFiles(String... files);
所以可以这样使用:
$compiler->compileMultipleFiles('/path/to/template1','/path/to/template2', ...);
“理论上”除了将 file1、file2、...、fileN 中的所有内容放入一个大文件中,然后将其编译为单个模板之外,什么都不会做。如果还不可能,我可以通过简单地将每个文件的内容组合到单个文件或缓存变量中并使用 compileString() 来模拟该功能,但这会破坏模板中的任何相对路径,这将是一个问题。
我也可以手动编译每个模板,但我最终会得到一个纯 html 文档,而无法附加到主模板中的块。
【问题讨论】:
标签: templates design-patterns phalcon volt