自定义min版smarty模板引擎MinSmarty.class.php文件及用法


Posted in PHP onMay 20, 2016

本文实例讲述了自定义的min版smarty模板引擎MinSmarty.class.php文件。分享给大家供大家参考,具体如下:

一、smarty的优点

smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。

二、写一个简单的smarty模版类

具体代码如下:

<?php
 class MinSmarty{
 // 模版文件的路径
 var $template_dir = "./templates/";
 // 模版文件被替换后的文件 命名格式为com_对应的tpl.php
 var $complie_dir = "./templates_c/";
 // 存放变量值
 var $tpl_vars = array();
 // 这里使用两个方法实现assign 和 display
 function assign($tpl_var,$var=NULL){
  if($tpl_var!=NULL){
  $this->tpl_vars[$tpl_var]=$var;
  }
 }
 // 这里编写display方法的实现
 function display($tpl_file){
  // 读取这个模版文件->替换可以运行的php文件(编译后文件)
  $tpl_file_path=$this->template_dir.$tpl_file;  // 模版文件的路径
  $complie_file_path=$this->complie_dir."com_".$tpl_file.".php";  //编译后的文件路径
  // 判断文件是否存在
  if(!file_exists($tpl_file_path)){
  return false;
  }
  // 不让每次执行都生成编译文件
  if(!file_exists($complie_file_path) || filemtime($tpl_file_path)>filemtime($complie_file_path)){
  $fp1_file_con=file_get_contents($tpl_file_path); // 获取模版文件的全部内容
  // 这里进行正则替换把  模版文件中的代码 {$title} 替换成 <?php echo $this->tpl_vars['title'];? >
  $pattern=array(
     '/\{\s*\$([a-zA-Z_][a-zA-Z0-9_]*)\s*\}/i'
  );
  $replace=array(
     '<?php echo $this->tpl_vars["${1}"];?>'
  );
  $new_str=preg_replace($pattern,$replace,$fp1_file_con);  // 替换后的内容
  file_put_contents($complie_file_path,$new_str);  // 替换后的内容生成一个php文件
  }
  // 引入编译后的文件
  include_once("$complie_file_path");
 }
 }
?>

下面的代码是对该类的测试

intro.php代码如下:

<?php
  include_once("MySmarty.class.php");
  $title="这里是标题";
  $content="这里是内容111111";
  $MySmarty=new MySmarty();
  $MySmarty->assign("title",$title);
  $MySmarty->assign("content",$content);
  $MySmarty->display("intro.tpl");
?>

模版如下:

intro.tpl:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{$title}</title>
</head>
<body>
{$content}
</body>
</html>

PHP 相关文章推荐
ASP知识讲座四
Oct 09 PHP
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
Jan 15 PHP
php Http_Template_IT类库进行模板替换
Mar 19 PHP
discuz的php防止sql注入函数
Jan 17 PHP
linux下为php添加curl扩展的方法
Jul 29 PHP
PHP程序开发范例学习之表单 获取文本框的值
Aug 08 PHP
php下获取http状态的实现代码
May 09 PHP
PHP常用技术文之文件操作和目录操作总结
Sep 27 PHP
PHP遍历数组的方法汇总
Apr 30 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
PHP之认识(二)关于Traits的用法详解
Apr 11 PHP
php+lottery.js实现九宫格抽奖功能
Jul 21 PHP
smarty自定义函数用法示例
May 20 #PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
May 20 #PHP
Yii框架组件和事件行为管理详解
May 20 #PHP
Yii框架表单模型和验证用法
May 20 #PHP
ThinkPHP中Common/common.php文件常用函数功能分析
May 20 #PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
May 20 #PHP
ThinkPHP表单令牌错误的相关解决方法分析
May 20 #PHP
You might like
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
ko knockoutjs动态属性绑定技巧应用
2012/11/14 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
Python制作钉钉加密/解密工具
2016/12/07 Python
pandas实现选取特定索引的行
2018/04/20 Python
Python matplotlib生成图片背景透明的示例代码
2019/08/30 Python
Python数学形态学实例分析
2019/09/06 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
会计自我鉴定范文
2013/10/06 职场文书
门前三包责任书
2014/04/15 职场文书
法学求职信
2014/06/22 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
学校施工安全责任书
2015/01/29 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
python 中yaml文件用法大全
2021/07/04 Python
sql server删除前1000行数据的方法实例
2021/08/30 SQL Server