//php 控制器文件
<?php
//引入模板引擎文件
include("20130304.php");
$smarty = new TinySmarty();
$qq_numbers=array('a1'=>'12333','a2'=>'2222222','a3'=>'333333','a4'=>'3333333');
$smarty->assign($qq_numbers);
$smarty->assign('title','这是我的QQ号码');
$smarty->assign('contents','这是我的QQ:1211884772');
$smarty->display('20120305_01.html');?>

模板引擎类20130304.php
<?php
/***
smarty模板引擎原理
1:读取模板文件
2:替换模板标签为php可执行代码
3:保存替换成功的php文件
***/
/*
问题?
1:每次访问都编译浪费cpu?
编译文件存在,不用在编译直接引入
2:模板文件修改后,必须重新编译该文件
当模板文件修改时间大于编译文件修改时间,说明模板文件被修改了,
因此要重新编译模板文件
*/
class TinySmarty{//模板文件存放目录public $template_dir="./templates/";//编译后文件存放目录public $compile_dir="./c_templates/";//存放变量值public $tpl_vars=array();//assign//将变量以数组形式存放到该$tpl_var属性public function assign($tpl_var,$var=null){//传入数组形式,为批量赋值if(is_array($tpl_var)){foreach($tpl_var as $_key=>$_val){if($_key!=''){$this->tpl_vars[$_key] = $_val;}}}else{//传入非空字符if($tpl_var!=''){$this->tpl_vars[$tpl_var] = $var;}}}/*name displayparam string $tpl_file 文件名*/public function display($tpl_file){//模板文件路径$template_file_path = $this->template_dir.$tpl_file;//编译文件路径$compile_file_path = $this->compile_dir.$tpl_file;//判断编译文件是否存在if(!file_exists($compile_file_path)||filemtime($template_file_path)>filemtime($compile_file_path)){//判断文件是否存在if(!file_exists($template_file_path)){return false;}//读取文件内容$fpl_file_con = file_get_contents($template_file_path);//替换模板标签//如:{$title} 替换为<?php echo $title; ? >//正则表达式//此处正则涉及到正则的反响引用$pattern = '/{\s*\$([_a-zA-Z][_0-9a-zA-Z]*)\s*\}/i';$replace = '<?php echo $this->tpl_vars["${1}"];?>';$new_file_con= preg_replace($pattern,$replace,$fpl_file_con);//写入文件内容file_put_contents($compile_file_path,$new_file_con);}//引入编译后的文件include ($compile_file_path);}
}?>

模板文件20120305_01.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{$title}</title>
</head>
<body>
<h1>hello-</h1>
{$contents}
</body>
</html> 

 

smarty模板引擎原理解析相关推荐

  1. 高性能JavaScript模板引擎原理解析

    来源:http://cdc.tencent.com/?p=5723 随着 web 发展,前端应用变得越来越复杂,基于后端的 javascript(Node.js) 也开始崭露头角,此时 javascr ...

  2. Smarty模板引擎和MVC设计模式

    Smarty模板引擎 一.什么是smarty? smarty是一个使用php写出来的模板php模板引擎,它提供了逻辑与外在内容的分离 目的:使用户界面和业务数据的代码分离 smarty 第三方的类库 ...

  3. 深入浅出之Smarty模板引擎工作机制(一)

    深入浅出Smarty模板引擎工作机制,我们将对比使用smarty模板引擎和没使用smarty模板引擎的两种开发方式的区别,并动手开发一个自己的模板引擎,以便加深对smarty模板引擎工作机制的理解. ...

  4. 深入浅出之Smarty模板引擎工作机制(二)

    源代码下载地址:深入浅出之Smarty模板引擎工作机制 接下来根据以下的Smarty模板引擎原理流程图开发一个自己的模板引擎用于学习,以便加深理解. Smarty模板引擎的原理,其实是这么一个过程: ...

  5. Smarty模板引擎工作机制(一)

    深入浅出Smarty模板引擎工作机制,我们将对比使用smarty模板引擎和没使用smarty模板引擎的两种开发方式的区别,并动手开发一个自己的模板引擎,以便加深对smarty模板引擎工作机制的理解. ...

  6. Smarty模板引擎工作机制(二)

    源代码下载地址:深入浅出之Smarty模板引擎工作机制 接下来根据以下的Smarty模板引擎原理流程图开发一个自己的模板引擎用于学习,以便加深理解. Smarty模板引擎的原理,其实是这么一个过程: ...

  7. 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)

    前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...

  8. smarty模板引擎工作原理

    1.模板引擎是什么 展示给用户的页面由数据及承载数据的标签组成,标签就是html,而数据就是由php处理的变量,这样就涉及到了前端和后端的交互,模板引擎就是将php代码与html代码分离的技术. sm ...

  9. Smarty模板引擎技术二

    Smarty模板引擎技术 内建函数 include_php内建函数 作用:载入一个php文件,将载入的文件的内容赋值给一个变量 注意:该内建函数只能在2.0中使用,如果使用的话,必须得实例化Smart ...

最新文章

  1. 伍六七带你学算法 入门篇-最长回文串
  2. matlab 2014 破解使用
  3. MVC6 (ASP.NET5) 自定义TagHelper
  4. 实战演示 Go 反射的使用方法和应用场景
  5. 在命令行中的vim编辑器加上行号
  6. 如何在水晶报表显示上下标
  7. 很强势!因拒绝退回用户保证金,知名在线旅游平台成“老赖”,回应...
  8. 酱油瓶上有两个字很重要,一直都被忽略了,以后看准再买!
  9. oracle12c不使用cdb模式,oracle 12c non-cdb升级成cdb模式
  10. 什么是TPM设备管理系统?本文来告诉你
  11. 【论文阅读】Zero-Resource Knowledge-Grounded Dialogue Generation
  12. js image对象
  13. 【重磅】2021年SCI影响因子滚烫式公布!各领域TOP期刊!(附下载链接)
  14. 详解如何获取深度学习模型中间层的输出值
  15. spring 事务中先删除再插入后唯一键冲突 delete then insert duplicate key
  16. 基于Vue3的排班日历方案
  17. 股票API下单接口是怎样传入交易数据的?
  18. layui框架的一些基本使用
  19. 微信小程序2022年发展方向曝光
  20. Android LinearGradient的使用

热门文章

  1. 十个经典的学生上课插嘴ZT
  2. 开源Android或将收费
  3. 阿里巴巴业务平台事业部总负责人墙辉:加速构建国际电商体系
  4. maven的仓库:本地和远程
  5. WF4.0 基础篇 (十八) Flowchar
  6. 祭奠IT男孩大学的生活
  7. 我的LDAP使用手记(Fedora-ds) 备忘用
  8. jQuery 插件---hotkeys快捷键(热键).
  9. 比特币现金的第四次战役
  10. Algs4-2.2.29自然的归并排序(未解决)