【发布时间】:2011-06-28 09:41:16
【问题描述】:
对于一个小组项目,我正在尝试为 PHP 创建一个模板引擎,以便那些不太熟悉该语言的人可以在其 HTML 中使用 {name} 之类的标签,PHP 将用数组中的预定义变量替换该标签。以及支持循环。
这远远超出了项目的预期,但由于我有使用 PHP 的经验,我认为让我保持忙碌是一个很好的挑战!
我的主要问题是,我如何做解析器的循环部分,这是实现这样一个系统的最佳方式。在您只推荐现有的模板系统之前,我更愿意自己创建它以获得经验,因为我们项目中的所有内容都必须是我们自己的。
目前使用 regex 和 preg_replace_callback 完成基本解析,它会检查 $data[name] 是否存在以及是否替换它。
我尝试过多种不同的循环方式,但不确定我是否走在正确的轨道上!
如果解析引擎给出的数据是这样的例子:
Array
(
[title] => The Title
[subtitle] => Subtitle
[footer] => Foot
[people] => Array
(
[0] => Array
(
[name] => Steve
[surname] => Johnson
)
[1] => Array
(
[name] => James
[surname] => Johnson
)
[2] => Array
(
[name] => josh
[surname] => Smith
)
)
[page] => Home
)
它正在解析的页面类似于:
<html>
<title>{title}</title>
<body>
<h1>{subtitle}</h1>
{LOOP:people}
<b>{name}</b> {surname}<br />
{ENDLOOP:people}
<br /><br />
<i>{footer}</i>
</body>
</html>
它会产生类似的东西:
<html>
<title>The Title</title>
<body>
<h1>Subtitle</h1>
<b>Steve</b> Johnson<br />
<b>James</b> Johnson<br />
<b>Josh</b> Smith<br />
<br /><br />
<i>Foot</i>
</body>
</html>
非常感谢您的宝贵时间!
非常感谢,
附:我完全不同意这一点,因为我正在寻找类似于已经存在的经验的东西,所以我的格式良好且易于理解的问题被否决了。
P.p.s 似乎对这个话题有很多意见,请不要投反对票,因为他们对你有不同的意见。每个人都有自己的权利!
【问题讨论】:
标签: php parsing templates nested-loops