自定义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 相关文章推荐
跟我学小偷程序之成功偷取首页(第三天)
Oct 09 PHP
PHP+DBM的同学录程序(2)
Oct 09 PHP
php下尝试使用GraphicsMagick的缩略图功能
Jan 01 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
php编写的一个E-mail验证类
Mar 25 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
Mar 25 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
May 06 PHP
浅析php如何实现App常用的秒发功能
Aug 03 PHP
php中的抽象方法和抽象类
Feb 14 PHP
PHP laravel中的多对多关系实例详解
Jun 07 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
Oct 17 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
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
jQuery 实现图片的依次加载图片功能
2017/07/06 jQuery
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
浅谈webpack 构建性能优化策略小结
2018/06/13 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
进一步探究Python中的正则表达式
2015/04/28 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
带你学习Python如何实现回归树模型
2020/07/16 Python
Rockport乐步美国官网:风靡美国的白宫鞋
2016/11/24 全球购物
PHP中如何使用Cookie
2015/10/28 面试题
分公司任命书
2014/06/06 职场文书
应急管理培训方案
2014/06/12 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
朋友聚会祝酒词
2015/08/10 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书