自定义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 相关文章推荐
WINDOWS服务器安装多套PHP的另类解决方案
Oct 09 PHP
基于mysql的bbs设计(三)
Oct 09 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
ThinkPHP3.1基础知识快速入门
Jun 19 PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 PHP
php魔术变量用法实例详解
Nov 13 PHP
避免Smarty与CSS语法冲突的方法
Mar 02 PHP
php中mysql操作buffer用法详解
Mar 19 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
PHP 观察者模式深入理解与应用分析
Sep 25 PHP
laravel 创建命令行命令的图文教程
Oct 23 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
Feb 07 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版微信公众号接口实现发红包的方法
2016/10/14 PHP
降低PHP Redis内存占用
2017/03/23 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
javascript 对象比较实现代码
2009/04/27 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
Js实现粘贴上传图片的原理及示例
2020/12/09 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
python使用htmllib分析网页内容的方法
2015/05/08 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
Python如何计算语句执行时间
2019/11/22 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
市政管理求职信范文
2014/05/07 职场文书
英语求职信范文
2014/05/23 职场文书
承诺书格式
2014/06/03 职场文书
保管员岗位职责
2015/02/14 职场文书
个人简历求职信范文
2015/03/20 职场文书
部队2015年终工作总结
2015/04/02 职场文书
python自动化测试通过日志3分钟定位bug
2021/11/20 Python
Promise静态四兄弟实现示例详解
2022/07/07 Javascript