自定义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 相关文章推荐
967 个函式
Oct 09 PHP
怎样在UNIX系统下安装MySQL
Oct 09 PHP
NOD32 v2.70.32 简体中文封装版 提供下载了
Feb 27 PHP
关于file_get_contents返回为空或函数不可用的解决方案
Jun 24 PHP
PHP对接微信公众平台消息接口开发流程教程
Mar 25 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
Jun 30 PHP
php生成圆角图片的方法
Apr 07 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
PHP培训要多少钱
Jun 06 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 PHP
详解PHP设计模式之依赖注入模式
May 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
PHP版自动生成文章摘要
2008/07/23 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
CSS常用网站布局实例
2008/04/03 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
javascript基础知识讲解
2017/01/11 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
2017/04/11 jQuery
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
2020/04/26 Python
学python最电脑配置有要求么
2020/07/05 Python
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
优秀团支部事迹材料
2014/02/08 职场文书
餐厅总厨求职信
2014/03/04 职场文书
大学生学习2014全国两会心得体会
2014/03/13 职场文书
授权委托书样本
2014/04/03 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
二审代理词范文
2015/05/25 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js
js中Object.create实例用法详解
2021/10/05 Javascript
Nginx的gzip相关介绍
2022/05/11 Servers