我想让我的新项目更容易开发,我想要一个非常简单的模板引擎解决方案。我在网上四处看看,一切都太过臃肿,或者让我畏缩不前。
我的HTML文件就像这样:
<html>
<head>
<title>{PAGE_TITLE}</title>
</head>
<body>
<h1>{PAGE_HEADER}</h1>
<p>Some random content that is likely not to be parsed with PHP.</p>
</body>
</html>
显然,我想用我用PHP设置的东西替换{PAGE_TITLE}
和{PAGE_HEADER}
。像这样:
<?php
$pageElements = array(
'{PAGE_TITLE}' => 'Some random title.',
'{PAGE_HEADER}' => 'A page header!'
);
?>
我会使用类似str_replace
的内容并将替换后的HTML加载到字符串中,然后将其打印到页面中?这就是我现在正在做的事情......有没有人有任何建议或方法可以做得更好?
感谢。
答案 0 :(得分:6)
您当前的策略是有效的,并且非常简单。 str_replace()
高效且干净,您只需将其循环以替换与您的变量内容完全匹配的标记即可。但是,缺点是您必须首先将所有模板加载到字符串中,这可能效率很低。
另一种非常相似的方法是,您只需使用extract()即可。 Extract将采用一组键/值对,并在本地范围内创建变量。如果include()
是同一范围内的模板,那么您的变量就可以使用了。
这样的事情:
function loadTemplate($template,$vars)
{
extract($vars);
include($template);
}
您的模板可能只是普通的PHP。
<html>
<head>
<title><?php echo $PAGE_TITLE ?></title>
</head>
<body>
<h1><?php echo $PAGE_HEADER ?></h1>
<p>Some random content that is likely not to be parsed with PHP.</p>
</body>
</html>
(显然你可以使用短标签来减少模板的冗长,尽管我不愿意出于兼容性原因。)
然后你所要做的就是:
$pageElements = array(
'PAGE_TITLE' => 'Some random title.',
'PAGE_HEADER' => 'A page header!'
);
loadTemplate('file.phtml',$pageElements);
答案 1 :(得分:5)
您可能对mustache.php感兴趣。它是Mustache
的一个非常轻量级的PHP类实现从自述文件中获取的快速示例:
<?php
include('Mustache.php');
$m = new Mustache;
echo $m->render('Hello {{planet}}', array('planet' => 'World!'));
// "Hello World!"
?>
还有一个更深入的例子 - 这是规范的Mustache模板:
Hello {{name}}
You have just won ${{value}}!
{{#in_ca}}
Well, ${{taxed_value}}, after taxes.
{{/in_ca}}
答案 2 :(得分:2)
如果您想要非常简单,PHP本身就是模板的引擎。只需使用include()
file.phtml:
<html>
<head>
<title><?=$tpl['PAGE_TITLE']?></title>
</head>
<body>
<h1><?=$tpl['PAGE_HEADER']?></h1>
<p>Some random content that is likely not to be parsed with PHP.</p>
</body>
</html>
<强> code.php:强>
tpl = Array
(
'PAGE_HEADER' => "This is the lazy way to do it",
'PAGE_TITLE' => "I don't care because i am doing it this way anyways"
)
include("file.phtml")
答案 3 :(得分:0)
function parseVars($vars, $file){
$file = file_get_contents($file);
foreach($vars as $key => $val){
str_replace("{".$key."}", $val, $file);
}
echo $file;
}
答案 4 :(得分:0)
使用此课程 模板引擎,支持块,循环,ifset(也适用于循环)和旋转。工作得很快。最适合中小型项目。
http://www.phpclasses.org/package/1216-PHP-Template-engine-blocks-loops-ifset-rotations.html