以下是我所做的基本示例。
抓取HTML模板
$template = file_get_contents("skins/".CSS_URL."/layouts/homepage.html");
构建要搜索的项目数组
$search = array("|{THUMB_FEATURED_IMAGE}|", "|{LARGE_FEATURED_IMAGE}|", "|{PAGE_CONTENT}|");
构建项目数组以用
替换搜索结果$replace = array($featured_image, $featured_image_l, $content);
进行实际替换
$output = preg_replace($search, $replace, $template);
然后回显输出。
这是不好的做法和/或是否有更好的方法而不必使用Smarty重写我的整个CMS?
答案 0 :(得分:2)
我说这样做并不是非常可怕,虽然它不是非常有利于资源,因为你有效地将内容拉两次。
只是在模板<?php echo $featured_image; ?>
中使用PHP标签并使用include()
包含模板文件不是一个更容易的选项吗?
答案 1 :(得分:0)
我认为最好的答案是使用PHP变量。然后,您只需包含“模板”文件,其中包含常规变量。
如果你真的想尝试一下你正在做的事情。你最好使用一个真正的HTML解析器。它可能会更快,更不容易出错。虽然实施它可能需要花费与实施Smarty相同的时间。
答案 2 :(得分:0)
这是一个古老的话题,但对于任何可能会看到这一点的人来说。 虽然我不确定它的最佳实践,但我一直在做的是通过数组返回一个包含和解析占位符。
<?php //page.php
$html = "<html>
<head>
<title>{PageTitle}<title>
</head>
...
</html>";
return $html;
然后简单地
function parseHTML($pageContents, $placeholders){
foreach($placeholders as $placeholder=>$value){
str_replace("\{{$placeholder}\}",$value,$pageContents);
}
return $pageContents;
}
$placeholders = ['PageTitle'=>'This is my page title'];
$pageContents = include "page.php";
$parsedHTML = parseHTML($pageContents, $placeholder);
输出看起来像
<html>
<head>
<title>This is my page title<title>
</head>
...
</html>
就像我说的那样,我并不是百分之百地说这是有效率的。我使用它是因为我的大多数项目都很小。