Phalcon设计方法/模式

时间:2014-04-15 00:42:59

标签: templates design-patterns phalcon volt

大家好,感谢您花时间阅读本文。

我一直在使用Phalcon一段时间来获得高性能的JSON / XML API。 管理这个应用程序的后端仍然是由symfony的一个版本驱动,但是它会被放弃支持Phalcon和 Volt 模板引擎。

现在我的问题如下:

想象一下基础应用程序和基本模板,应用程序是模块化的。大多数模块都将由不同的团队开发,但他们都必须集成niceley,这从程序逻辑方面来说不是问题。

但想象如下: 你有一个简单的页面,一些形式,头,导航等,等等。 现在有人想要添加一个模块,无论出于何种目的,都会将模板块注入页脚。例如,将TagCloud(用于搜索引擎优化)添加到页脚中。

这里的想法是,该插件可以编辑任何模板文件,而不是它自带的模板文件。

如何在不需要在初始开发后更改基本模板的情况下实现这一目标?

这个想法基本上是挂钩到一个事件,为简单起见,我们称之为TEMPLATE_RENDER。 触发TEMPLATE_RENDER,现在为其注册的每个侦听器都有机会像模板一样添加其他块等等。无需手动更改核心模板。

如果有一种方法可以在Volt中简单地添加一堆模板文件并输出编译结果就足够了。


编辑:

好的,经过一番思考后,我在Volt寻找的是:

Compiler#compileMultipleFiles(String... files);

所以它可以像这样使用:

$compiler->compileMultipleFiles('/path/to/template1','/path/to/template2', ...);

在理论上哪个不会做任何事情,而不是把文件1,文件2,...,文件N中的所有内容放入一个大文件中,然后将其编译为单个模板。如果还不可能,我可以通过简单地将每个文件内容组合成单个文件或缓存变量并使用compileString()来模拟该函数,但这会破坏模板中的任何相对路径,这将是一个问题。

我也可以手动编译每个模板,但是我最终会得到一个纯html文档而无法附加到主模板中的块。

2 个答案:

答案 0 :(得分:0)

显然没有这样的功能。

但是,您可以使用数组并在主模板末尾迭代此区域,并动态包含传递到其中的任何文件。

答案 1 :(得分:0)

我相信你正在寻找Volt include。您可以在模板中留下一些测试,例如:

{% if foo.enabled %}
  {% include "foo/bar.volt" %}
{% endif %}

如果你需要比这更复杂的东西,你也可以使用template inheritance