自定义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 相关文章推荐
PHP4中session登录页面的应用
Jul 25 PHP
PHP 类商品秒杀计时实现代码
May 05 PHP
php中根据某年第几天计算出日期年月日的代码
Feb 24 PHP
ThinkPHP的模版中调用session数据的方法
Jul 01 PHP
php正则preg_replace_callback函数用法实例
Jun 01 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
java微信开发之上传下载多媒体文件
Jun 24 PHP
使用Codeigniter重写insert的方法(推荐)
Mar 23 PHP
PHP命名空间namespace的定义方法详解
Mar 29 PHP
Laravel中的chunk组块结果集处理与注意问题
Aug 15 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
Jun 03 PHP
THINKPHP5分页数据对象处理过程解析
Oct 28 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判断是否为空的几个函数对比
2015/04/21 PHP
php实现简单加入购物车功能
2017/03/07 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
js图片上传的封装代码
2017/08/01 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
python中的字典操作及字典函数
2018/01/03 Python
Python中 传递值 和 传递引用 的区别解析
2018/02/22 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
波兰最大的宠物用品网上商店:FERA.PL
2019/08/11 全球购物
印度尼西亚手表和包包商店:Urban Icon
2019/12/12 全球购物
校班主任推荐信范文
2013/12/03 职场文书
优秀党员个人总结
2015/02/14 职场文书
酒店收银员岗位职责
2015/04/07 职场文书
2016党校学习心得体会
2016/01/07 职场文书
《梅花魂》教学反思
2016/02/18 职场文书
PyQt5实现多张图片显示并滚动
2021/06/11 Python
Python Pandas常用函数方法总结
2021/06/15 Python