thinkphp2.1
thinkTemplate.class.php,
public function load($templateFile,$templateVar,$charset)
{
$this->tVar=$templateVar;
/*
loadTemplate($templateFile);主要是编译模板,并返回编译后文件的路径。
如,模板index.html中有
<volist name='test' id='t'>
{$t.title}
</volist>
则这里的代码编译为如
<?php
foreach($test as $key=>$val)
echo $t['title']
?>
等类似的代码
并返回编译完成后的文件的路径,如
Runtime/Cache/0573c70d8602d961e53f714ea77bd87c.php
*/
$templateCacheFile=$this->loadTemplate($templateFile);
extract($templateVar,EXTR_OVERWRITE);//这个函数就是让数组的键为变量,该数组元素的值为该变量的值
include $templateCacheFile;
}
ecmall 2.2.1
template.php,
function _eval($content)
{
ob_start();
/*
这是关键的一句,$content为编译后的缓存的内容,'?'.'>'不能少否则出错,'? >'意思是让php代码结束(具体了解可能还要去看eval实现的原理)。
在这里eval让$content中的<?php ....?>之类的代码等到执行,里面的$this代指eval函数所在的类
*/
eval('?'.'>'.trim($content));
$content=ob_get_contents();
ob_end_clean();
return $content;
}
接着在
display($filename,$cache_id='')中输出$content,如echo $out;