什么是最好的方式来创建我自己的模板引擎使用php,以转移html模板到实际的网站,并取代占位符的实际数据…好吧,让我来解决我自己的问题。
class Template{
$private $output = '';
public function Load_Template($template){
ob_start();
include($template);
$this->output = ob_get_clean();
}
public function Replace($data){
$this->output = str_replace(array_keys($data), array_values($data), $this->output);
}
public function Display($add_footer = true){
echo $this->output;
}}
这将适用于一个简单的模板,如...
<div>{username}</div>但是在我的模板中使用循环最好的方法是什么呢?让我们这样说:
<ul>
<li>{username}</li>//Loop this line for each user
</ul>另外,我不想使用像smarty这样的第三方引擎,我只想知道我自己怎么做。谢谢
发布于 2009-08-20 18:38:23
老实说,如果我必须用PHP创建自己的模板引擎,我会直接使用PHP。只需要限制自己只使用“模板”中的变量插值和循环即可。
编写自己的模板引擎是一件棘手的事情。毕竟,您正在发明一种全新的语言,尽管它很简单。要让它变得非常强大(即,超越简单的字符串替换),您可能必须编写一个实际的基于堆栈的解析器,而不是依赖于str_replace。
您可以使用正则表达式来实现这一点,就像您可以使用正则表达式解析HTML一样,但是它不是非常可靠、易于阅读、易于调试或易于扩展。
发布于 2009-08-20 18:39:01
use php itself怎么样?
<div><?php echo $username ?></div>
<ul>
<?php foreach($users as $user): ?>
<li><?php echo $user->username ?></li>
<?php endforeach ?>
</ul>*注意:时髦的endforeach语法解释了here。
发布于 2009-08-20 18:42:14
您提到您不想使用像Smarty这样的第三方引擎,但您基本上是在着手做与Smarty正在做的完全相同的事情。
在谈到PHP中的模板时,人们经常忽略的一点是,PHP是一种模板语言。你没有理由不能在你的模板中使用常规的旧PHP。事实上,这正是它最初设计的目的。
如果您真的想构建自己的模板引擎,那么您必须坐下来为循环和您想要使用的任何其他模板结构设计一个语法。就像[do 5 times] { loop code }一样。你想怎么编就怎么编。然后,您必须使用PHP解析它,并修改模板以将其替换为循环结构。
这是一项艰巨的任务。使用普通的PHP会容易得多。
https://stackoverflow.com/questions/1308023
复制相似问题