我需要制作一个小而简单的php模板引擎,我搜索了很多,其中很多都太复杂而无法理解,我不想使用smarty和其他类似引擎,我从Stack Overflow中得到了一些想法这个:
$template = file_get_contents('file.html');
$array = array('var1' => 'value',
'txt' => 'text');
foreach($array as $key => $value)
{
$template = str_replace('{'.$key.'}', $value, $template);
}
echo $template;
现在而不是回显模板我只想添加包含“file.html”,它将显示具有正确变量值的文件,我想将引擎放在一个单独的位置,只是将它包含在模板中我的内容想要使用它声明数组,最后包括像phpbb这样的html文件。对不起,我要求的很多,但任何人都可以解释一下这背后的基本概念吗?
编辑:好吧,让我坦率地说我正在制作一个论坛脚本,我有很多想法,但我想让它的模板系统像phpbb所以我需要一个单独的模板引擎自定义一个,如果你可以帮助那么请你受邀与我合作。抱歉广告..:p答案 0 :(得分:11)
file.html:
<html>
<body>
<h3>Hi there, <?php echo $name ?></h3>
</body>
</html>
file.php:
<?php
$name = "Keshav";
include('file.html');
?>
不会比这更简单。是的,它使用全局变量,但如果简单是游戏的名称,就是这样。只需访问“http://example.com/file.php”即可离开。
现在,如果您希望用户在浏览器的地址栏中看到“file.html”,您必须将您的网络服务器配置为将.html文件视为PHP脚本,这有点复杂,但绝对可行。完成后,您可以将两个文件合并为一个文件:
file.html:
<?php
$name = "Keshav";
?>
<html>
<body>
<h3>Hi there, <?php echo $name ?></h3>
</body>
</html>
答案 1 :(得分:5)
如果脚本更易于维护,您可以将它们移动到函数中吗?
类似的东西:
<?php
function get_content($file, $data)
{
$template = file_get_contents($file);
foreach($data as $key => $value)
{
$template = str_replace('{'.$key.'}', $value, $template);
}
return $template;
}
你可以这样使用它:
<?php
$file = '/path/to/your/file.php';
$data = = array('var1' => 'value',
'txt' => 'text');
echo get_content($file, $data);
答案 2 :(得分:3)
一旦你解决了所有错误,解决了你自己陷入的巨大性能问题,你最终会得到模板引擎,就像Smarty和otheres一样。
这样的find'nplaceplace方法比编译PHP要慢得多。它不能很好地处理转义(你会遇到XSS问题)。添加条件和循环将非常困难,您迟早会需要它们。
答案 3 :(得分:1)
<?php
class view {
private $file;
private $vars = array();
public function __construct($file) {
$this->file = $file;
}
public function __set($key, $val) {
$this->vars[$key] = $val;
}
public function __get($key, $val) {
return (isset($this->vars[$key])) ? $this->vars[$key] : null;
}
public function render() {
//start output buffering (so we can return the content)
ob_start();
//bring all variables into "local" variables using "variable variable names"
foreach($this->vars as $k => $v) {
$$k = $v;
}
//include view
include($this->file);
$str = ob_get_contents();//get teh entire view.
ob_end_clean();//stop output buffering
return $str;
}
}
以下是如何使用它:
<?php
$view = new view('userprofile.php');
$view->name = 'Afflicto';
$view->bio = "I'm a geek.";
echo $view->render();