自定义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+mysql保存和输出文件
Oct 09 PHP
php 删除无限级目录与文件代码共享
Nov 22 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
Aug 21 PHP
PHP中调用ASP.NET的WebService的代码
Apr 22 PHP
解析PHP缓存函数的使用说明
May 10 PHP
codeigniter中测试通过的分页类示例
Apr 17 PHP
php中用memcached实现页面防刷新功能
Aug 19 PHP
php数组键名技巧小结
Feb 17 PHP
php简单统计中文个数的方法
Sep 30 PHP
PHP实现多图上传和单图上传功能
May 17 PHP
RSA实现JS前端加密与PHP后端解密功能示例
Aug 05 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 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
给多个地址发邮件的类
2006/10/09 PHP
php中$this-&amp;gt;含义分析
2009/11/29 PHP
PHP四大安全策略
2014/03/12 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
javascript操作表格排序实例分析
2015/05/06 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
Bootstrap栅格系统的使用和理解2
2016/12/14 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
Vue.js实现数据响应的方法
2018/08/13 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
js实现全选反选不选功能代码详解
2019/04/24 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
使用Python下载Bing图片(代码)
2013/11/07 Python
Python中import机制详解
2017/11/14 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
logging level级别介绍
2020/02/21 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
高中生校园生活自我评价
2013/09/19 职场文书
公益活动邀请函
2014/02/05 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
党校学习心得体会范文
2014/09/09 职场文书
学习三严三实心得体会
2014/10/13 职场文书
股权转让协议范本
2014/12/07 职场文书
美丽人生观后感
2015/06/03 职场文书