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]*//替换后的部分<?phpecho$this->vars['title'];?>$rep="<?phpecho\$this->vars['\\1'];?>";$newhtml=preg_replace($reg,$rep,$html);file_put_contents($comfile,$newhtml);}include$comfile;}}
调用模板页面 index.php
<?phpheader('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页面
<html><head><title>{$title}</title></head><body><h1>{$title}</h1><div>{$content}</div></body></html>
输出结果
object(Smarty)[1]private'vars'=>array(size=2)'title'=>string'Thisisatest'(length=14)'content'=>string'Thisiscontent......'(length=22)ThisisatestThisiscontent......