自定义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生成zip压缩文件的方法详解
Jun 09 PHP
PHP中批量生成静态html(命令行下运行PHP)
Apr 19 PHP
ThinkPHP CURD方法之field方法详解
Jun 18 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 PHP
php通过Chianz.com获取IP地址与地区的方法
Jan 14 PHP
php实现兼容2038年后Unix时间戳转换函数
Mar 18 PHP
php查询mysql数据库并将结果保存到数组的方法
Mar 18 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
Mar 07 PHP
PHP实现可精确验证身份证号码的工具类示例
May 31 PHP
PHP实现数据四舍五入的方法小结【4种方法】
Mar 27 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+ACCESS 文章管理程序代码
2010/06/21 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
JS实现字体选色板实例代码
2013/11/20 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
2018/06/09 jQuery
解决bootstrap-select 动态加载数据不显示的问题
2018/08/10 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
python实现遍历文件夹修改文件后缀
2018/08/28 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
python中return如何写
2020/06/18 Python
Python脚本调试工具安装过程
2021/01/11 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
北卡罗来纳州豪华家具和家居装饰店:Carolina Rustica
2018/10/30 全球购物
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
房屋租赁意向书
2014/04/01 职场文书
学校食品安全实施方案
2014/06/14 职场文书
商务英语专业求职信
2014/06/26 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
土建技术员岗位职责
2015/04/11 职场文书
技术入股合作协议书
2016/03/21 职场文书