自定义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 相关文章推荐
PHPShop存在多个安全漏洞
Oct 09 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
Apr 09 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
如何用C语言编写PHP扩展的详解
Jun 13 PHP
PHP APC缓存配置、使用详解
Mar 06 PHP
php命令行使用方法和命令行参数说明
Apr 08 PHP
浅析php原型模式
Nov 25 PHP
php将图片保存为不同尺寸图片的图片类实例
Mar 30 PHP
PHP获取昨天、今天及明天日期的方法
Feb 03 PHP
Thinkphp开发--集成极光推送
Sep 15 PHP
php实现socket推送技术的示例
Dec 20 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 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
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
JS target与currentTarget区别说明
2011/08/28 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
javascript实现table表格隔行变色的方法
2015/05/13 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
2015/07/17 Javascript
Bootstrap表单布局
2016/07/19 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
Vue.js 使用v-cloak后仍显示变量的解决方法
2018/11/19 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
python根据经纬度计算距离示例
2014/02/16 Python
Python中Continue语句的用法的举例详解
2015/05/14 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
Python异常处理机制结构实例解析
2020/07/23 Python
类如何去实现接口
2013/12/19 面试题
安全月活动总结
2014/05/05 职场文书
公司周年庆典标语
2014/10/07 职场文书
学前班教学反思
2016/02/24 职场文书
Nginx进程管理和重载原理详解
2021/04/22 Servers
我收到了德劲DE1107
2022/04/05 无线电