自定义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 相关文章推荐
ThinkPHP 连接Oracle数据库的详细教程[全]
Jul 16 PHP
解析yii数据库的增删查改
Jun 20 PHP
php上传图片存入数据库示例分享
Mar 11 PHP
PHP版本常用的排序算法汇总
Dec 20 PHP
PHP实现的简单分页类及用法示例
May 06 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
PHPExcel导出2003和2007的excel文档功能示例
Jan 04 PHP
PHP清除缓存的几种方法总结
Sep 12 PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 PHP
PHP重载基础知识回顾
Sep 10 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 生成饼图 三维饼图
2009/09/28 PHP
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
javascript比较文档位置
2008/04/08 Javascript
javascript 类定义的4种方法
2009/09/12 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
2018/11/30 Python
python 实现UTC时间加减的方法
2018/12/31 Python
Django中的用户身份验证示例详解
2019/08/07 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
Python实现京东抢秒杀功能
2021/01/25 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
美国在线购物频道:Shop LC
2019/04/21 全球购物
青年志愿者活动总结
2014/04/26 职场文书
男性健康日的活动方案
2014/08/18 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2015入党自传格式范文
2015/06/26 职场文书
素质拓展训练感想
2015/08/07 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技
关于MySQL中explain工具的使用
2023/05/08 MySQL