smarty模板引擎类简单工作原理
利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件。例如 模板文件中{$title}利用正则表达式找到并替换成 <?php echo $this->vars['title'];?>
自定义 Smarty 模板引擎类 smarty.class.php页面<?php
/*
*自定义Smarty模板引擎类
*/
classSmarty{
private$vars=array();
//第一个向模板中分配变量
//有两个参数一个参数是模板中的变量名,一个时分配给它的变量值
publicfunctionassign($name,$value=null){
if($name!='')
$this->vars[$name]=$value;
}
//加载指定的模板并显示
//有一个参数是模板的文件名
publicfunctiondisplay($tplname){
$comfile="./comps/".$tplname."_com.php";
$tplname="./templates/".$tplname;
//编译文件不存在或者模板文件有变化才需要编译
if(!file_exists($comfile)||filemtime($tplname)>filemtime($comfile)){
$html=file_get_contents($tplname);
//要替换的部分{title}
$reg='/\{\s*\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*\}/';
//变量正则表达式[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
//替换后的部分<?php echo$this->vars['title'];?>
$rep="<?php echo\$this->vars['\\1'];?>";
$newhtml=preg_replace($reg,$rep,$html);
file_put_contents($comfile,$newhtml);
}
include$comfile;
}
}
调用模板页面 index.php<?php
header('content-type:text/html;charset=utf-8');
/*
*模版引擎
*PHP超文本预处理脚本语言
*自定义模板引擎
*
*/
//包含模板引擎类
include'smart.class.php';
//创建模板引擎对象
$smarty=newSmarty();
//连接数据库
//执行SQL语句
//这是从数据库获取的动态数据,需要在模板中显示
$title="Thisisatest";
$content="Thisiscontent......";
//第一个向模板中分配变量
$smarty->assign('title',$title);
$smarty->assign('content',$content);
var_dump($smarty);
//加载指定的模板并显示
$smarty->display('c.php');
模板文件页 c.php页面
{$title}
{$title}
{$content}
输出结果object(Smarty)[1]private'vars'=>
array(size=2)
'title'=>string'Thisisatest'(length=14)
'content'=>string'Thisiscontent......'(length=22)
Thisisatest
Thisiscontent......