自定义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 相关文章推荐
php读取30天之内的根据算法排序的代码
Apr 06 PHP
PHP 编程的 5个良好习惯
Feb 20 PHP
一步一步学习PHP(1) php开发环境配置
Feb 15 PHP
php设计模式 Chain Of Responsibility (职责链模式)
Jun 26 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
Jun 08 PHP
解析PHP提交后跳转
Jun 23 PHP
php遍历目录输出目录及其下的所有文件示例
Jan 27 PHP
五款PHP代码重构工具推荐
Oct 14 PHP
PDO预处理语句PDOStatement对象使用总结
Nov 20 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 PHP
总结PHP中数值计算的注意事项
Aug 14 PHP
Zend Framework入门教程之Zend_Mail用法示例
Dec 08 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模板技术[转]
2007/01/04 PHP
php代码收集表单内容并写入文件的代码
2012/01/29 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
php实现数据库的增删改查
2017/02/26 PHP
JavaScript Chart 插件整理
2010/06/18 Javascript
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
下拉框select的绑定示例
2014/09/04 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
python复制文件代码实现
2013/12/23 Python
python动态性强类型用法实例
2015/05/09 Python
python链接Oracle数据库的方法
2015/06/28 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
生日寄语大全
2014/04/08 职场文书
鉴定评语大全
2014/05/05 职场文书
技校毕业生自荐信
2014/06/03 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
后勤个人工作总结
2015/02/28 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
python 破解加密zip文件的密码
2021/04/22 Python
详解Redis基本命令与使用场景
2021/06/01 Redis
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python