我正在开展一个项目,我将所有HTML内容与其余的PHP代码分开。需要为PHP变量解析任何HTML的每个实例都通过函数调用发送。大多数都处理来自数据库的动态数据。
模板文件的一个简单示例:
<div id='{$data['id']}'>{$data['text']}</div>
$ data数组中的变量通过函数调用传递,其中HTML代码段需要添加到输出缓冲区:
$output .= $html->load_template('template_id', array('id' => 123, 'text' => 'Testing'));
html :: load_template()函数只是找到正确的文本文件,并且应该加载变量并将字符串作为HTML返回。这是我遇到问题的地方:
public static function load($template, $data=array()) {
ob_start();
include ( TEMPLATE . $template .'.tpl' );
ob_flush();
}
我尝试过使用include()和file_get_contents(),但无济于事 - 我正在寻找一个简单的解决方案,我可以使用{$ data ['var']}语法,最好保留模板HTML作为一个简单的变量,因此可以将其添加到输出中。
我试图避免使用eval()。
有人可以给我一些指导吗?
答案 0 :(得分:0)
我过去做过同样的事情,你可以像这样修改下面的代码:
public static function load($template, $data=array()) {
ob_start();
include ( TEMPLATE . $template .'.tpl' );
$getData = ob_get_clean();
preg_match_all("|{([^>].*)}|U", $getData, $getDataArr, PREG_SET_ORDER);
if (is_array($getDataArr) && count($getDataArr) > 0) {
foreach ($getDataArr as $php) {
if (strpos($php[1],'$') !== false) {
$getData= str_replace($php[0], (eval('return $'.str_replace('$', '', $php[1]).';')), $getData);
}
}
}
echo $getData;
}