大家好,感谢您花时间阅读本文。
我一直在使用 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 文档,而无法附加到主模板中的块。