自定义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 相关文章推荐
php上传、管理照片示例
Oct 09 PHP
PHP文件上传原理简单分析
May 29 PHP
php中引用符号(&amp;)的使用详解
Nov 13 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
Jan 22 PHP
php中的静态变量的基本用法
Mar 20 PHP
PHP中使用虚代理实现延迟加载技术
Nov 05 PHP
PHP中常用的数组操作方法笔记整理
May 16 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
Yii2单元测试用法示例
Nov 12 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 PHP
php和html的区别点详细总结
Sep 24 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 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
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
JavaScript中Function详解
2015/02/27 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
jquery实现的动态回到顶部特效代码
2015/10/28 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
Vue 样式绑定的实现方法
2019/01/15 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
javascript History对象原理解析
2020/02/17 Javascript
python类定义的讲解
2013/11/01 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
新闻专业毕业生求职信
2014/08/08 职场文书
2014大学生批评与自我批评思想汇报
2014/09/21 职场文书
上课说话检讨书500字
2014/11/01 职场文书
催款函范本大全
2015/06/24 职场文书
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android