smarty模板引擎原理解析
//php 控制器文件
<?php
//引入模板引擎文件
include("20130304.php");
$smarty =newTinySmarty();
$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:模板文件修改后,必须重新编译该文件
当模板文件修改时间大于编译文件修改时间,说明模板文件被修改了,
因此要重新编译模板文件
*/
classTinySmarty{
//模板文件存放目录
public $template_dir="./templates/";
//编译后文件存放目录
public $compile_dir="./c_templates/";
//存放变量值
public $tpl_vars=array();
//assign
//将变量以数组形式存放到该$tpl_var属性
publicfunction 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 display
param string $tpl_file 文件名
*/
publicfunction 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)){
returnfalse;
}
//读取文件内容
$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模板引擎原理解析的更多相关文章
- 迷你版 smarty --模板引擎和解析
http://blog.ipodmp.com/archives/php-write-a-mini-smarty-template-engine/ 迷你版Smarty模板引擎目录结构如下: ① 要开发一 ...
- 高性能JavaScript模板引擎原理解析
随着 web 发展,前端应用变得越来越复杂,基于后端的 javascript(Node.js) 也开始崭露头角,此时 javascript 被寄予了更大的期望,与此同时 javascript MVC ...
- Smarty模板引擎原理概述
smarty(模板引擎,模板技术) 使用smarty主要是为了实现逻辑和外在内容的分离: 特点: 1.速度快(因为第二次执行的时候使用第一次执行时生成的编译文件) 2.缓存技术(正是因为缓存技术,使得 ...
- 深入浅出之Smarty模板引擎工作机制(二)
源代码下载地址:深入浅出之Smarty模板引擎工作机制 接下来根据以下的Smarty模板引擎原理流程图开发一个自己的模板引擎用于学习,以便加深理解. Smarty模板引擎的原理,其实是这么一个过程: ...
- 深入浅出之Smarty模板引擎工作机制(一)
深入浅出Smarty模板引擎工作机制,我们将对比使用smarty模板引擎和没使用smarty模板引擎的两种开发方式的区别,并动手开发一个自己的模板引擎,以便加深对smarty模板引擎工作机制的理解. ...
- 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)
前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...
- Smarty模板引擎技术二
Smarty模板引擎技术 内建函数 include_php内建函数 作用:载入一个php文件,将载入的文件的内容赋值给一个变量 注意:该内建函数只能在2.0中使用,如果使用的话,必须得实例化Sma ...
- JavaScript模板引擎原理
JavaScript模板引擎原理,几行代码的事儿 2013-12-03 16:35 by BarretLee, 650 阅读, 6 评论, 收藏, 编辑 一.前言 什么是模板引擎,说的简单点,就是一个 ...
- Smarty模板引擎技术
Smarty模板引擎技术 什么是模板引擎? 什么是Smarty模板引擎? 为何选择Smarty模板引擎? 如何使用Smarty模板引擎? 一.历史背景 场景一:回顾之前编写PHP项目的方式 //链接数 ...
随机推荐
- CSS 最核心的几个概念
CSS 中最核心的几个概念,包括:盒模型.position.float等. 这些是 CSS 的基础,也是最常用的几个属性,它们之间看似独立却又相辅相成. 元素类型 HTML 的元素可以分为两种: 块级 ...
- java.util.concurrent 包笔记 --- BlockingQueue
BlockingQueue 队列接口,具有 4 组不同的方法用于插入.移除以及对队列中的元素进行检查.如果请求的操作不能得到立即执行的话,每个方法的表现也不同.这些方法如下: Throws exc ...
- Ajax页面跳转
<script type="text/javascript" > $(document).ready(function () { $(&qu ...
- web 网站安全证书已过期或不可信 是否继续浏览
发生环境:魅族MX4 uc浏览器 IIS部署SSL证书后提示不可信的解决方案 第一步:打开mmc——点击文件——添加删除管理单元——证书——计算机帐户 第二步:在计算机帐户的个人证书里面导入pfx格 ...
- NIO机制总结
Selector selector = Selector.open(); 普通的IO流的读取,写入都是一个字节一个字节或一个字符一个字符的循环进行,在这个过程中,程序是阻塞的,inputStream虽 ...
- jQuery 简单归纳总结
jQuery语法是为HTML元素的选取编制的,能够对元素运行某些操作. 基础语法是:$(selector).action() +美元符号定义 jQuery +选择符(selector)"查询 ...
- 使用val()方法设置表单中的默认选中项
有时候我们展示给用户的表单中的checkbox,radio,selec等标签的一些项是默认选中的.比方:当用户改动文章的时候,假设相应的栏目为下拉框的话,那么它的默认选中值应该是原来的栏目位置. 能够 ...
- visualvm
http://visualvm.java.net/features.html http://visualvm.java.net/zh_CN/gettingstarted.html
- Qemu下安装Sun Solairs8简明教程 转
http://blog.csdn.net/stonesharp/article/details/8928393 Qemu下安装Sun Solairs8简明教程(Centos6. / Win7) 作者: ...
- Bootstrap-全局css样式之按钮
这里所说的按钮只是Bootstrap设计的能使标签或元素呈现按钮样式的属性,所以为 <a>.<button> 或 <input> 元素添加按钮类(button cl ...