自定义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 相关文章推荐
弄了个检测传输的参数是否为数字的Function
Dec 06 PHP
php在线打包程序源码
Jul 27 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
Jun 03 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
php实现按文件名搜索文件的远程文件查找器
May 10 PHP
destoon实现首页显示供应、企业、资讯条数的方法
Jul 15 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
常用PHP封装分页工具类
Jan 14 PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
Feb 04 PHP
完美解决thinkphp唯一索引重复时出错的问题
Mar 31 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
May 06 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实现最简单的MVC框架实例教程
2014/09/08 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
仿谷歌主页js动画效果实现代码
2013/07/14 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
详解Python中where()函数的用法
2018/03/27 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
python实现简单的五子棋游戏
2020/09/01 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
火山咖啡:Volcanica Coffee
2019/10/29 全球购物
中专生职业生涯规划书范文
2014/01/10 职场文书
停车场管理协议书范本
2014/10/08 职场文书
2014年科室工作总结
2014/11/20 职场文书
法学专业求职信范文
2015/03/19 职场文书
《梅花魂》教学反思
2016/02/18 职场文书
团组织关系介绍信
2019/06/24 职场文书
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js