与RoR模板partials / collections相当的PHP

时间:2009-10-27 20:35:01

标签: php templates partial-views

我正在尝试找出为我正在编写的PHP模板类实现RoR样式的部分/集合的最有效方法。对于那些不熟悉rails的人,我想迭代位于单独文件中的模板片段(比如表行或列表项)。我想这样做 而不是依靠eval或在循环中放置一个包含

我见过一个similar post来解决单个部分,这些部分是微不足道的,但没有任何内容可以涵盖在集合中实现部分内容。我一直在考虑这个问题,这么长时间我的头疼,我担心我会忽略一个明显的解决方案。我希望这里有人可以提出一个优雅的解决方案,再次,不需要eval或包含在循环中。 TIA。

2 个答案:

答案 0 :(得分:1)

你需要一个模板引擎,它可以自己处理包括然后立即评估整个事物。很像c预处理器的工作原理。

第1步(来源模板):

$template = '
   foreach($bigarray as $record)
       #include "template_for_record.php"
'

第2步(预处理后):

$template = '
   foreach($bigarray as $record)
       // include statement replaced with file contents
       echo $record['name'] etc
'

第3步(最终渲染)

  // eval() only once
  eval($template);

通过这种方式,您可以避免在每个循环步骤中进行evaling /包括子模板的开销。

答案 1 :(得分:0)

你问的是如何在不诉诸解决方案的情况下做点什么。

你使用的任何模板系统都会在循环中使用eval或include,即使它埋藏在1000层深的抽象中。

这就是它的完成方式。