【发布时间】:2011-11-17 10:14:04
【问题描述】:
当我为网站编写 PHP 代码时,我不喜欢将业务逻辑与表示层混合,因此我倾向于创建标记模板。我编写了一个非常轻量级的模板引擎来促进这一点,因为我真的不想转向像 Smarty 这样成熟的模板框架。
这是我所做的一个简化示例:
function renderTemplatePage($page, $params)
{
$page = readTemplateFile("templates/{$page}");
$tokens = getTemplateTokens($page);
foreach($tokens as $token)
{
if(substr($token, 0, 6) == "%_TPL_")
{
$subPage = renderTemplatePage(tokenToPageName($token), $params);
$page = str_replace($token, $subPage, $page);
}
else
{
$page = str_replace($token, $params[$token], $page);
}
}
return $page;
}
示例页面:
<html>
<head><title>%_PageTitle_%</title></head>
<body>
<div id="header">%_TPL_Header_%</div>
<div id="content">%_TPL_Homepage_%</div>
<div id="footer">%_TPL_Footer_%</div>
</body>
</html>
调用renderTemplatePage("index", array("PageTitle" => "Home")) 将生成一个名为“主页”的页面,其中包含来自页眉、主页和页脚模板的内容。
我在调用渲染之前完成了所有逻辑(包括数据库查询等),因此我可以将一个大的$params 数组聚集起来,然后只需执行一次调用即可将其全部渲染。
这种方法有什么缺陷吗?有没有更标准的方法来做到这一点?
【问题讨论】:
-
PHP 中有许多 模板引擎现成可用。创建自己的东西通常没有什么意义,但如果它适合你的需要,那就太好了。这不是一个真正的问题......
-
你可以得到一个现成的模板系统,比如 smarty。其他人会更容易跟随。
-
@anttir - 正如我所说,我不想使用 Smarty 或任何其他成熟的模板引擎。
-
@draevor - 我不是要求更换引擎的建议。我只想知道我在定义模板和让我的引擎读取它们的方式上是否存在任何缺陷。通常有这样的“最佳实践”规则。
-
好吧伙计们 - 让我们同意不同,然后继续……
标签: php html templates template-engine