//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模板引擎原理解析的更多相关文章

  1. 迷你版 smarty --模板引擎和解析

    http://blog.ipodmp.com/archives/php-write-a-mini-smarty-template-engine/ 迷你版Smarty模板引擎目录结构如下: ① 要开发一 ...

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

    随着 web 发展,前端应用变得越来越复杂,基于后端的 javascript(Node.js) 也开始崭露头角,此时 javascript 被寄予了更大的期望,与此同时 javascript MVC ...

  3. Smarty模板引擎原理概述

    smarty(模板引擎,模板技术) 使用smarty主要是为了实现逻辑和外在内容的分离: 特点: 1.速度快(因为第二次执行的时候使用第一次执行时生成的编译文件) 2.缓存技术(正是因为缓存技术,使得 ...

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

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

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

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

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

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

  7. Smarty模板引擎技术二

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

  8. JavaScript模板引擎原理

    JavaScript模板引擎原理,几行代码的事儿 2013-12-03 16:35 by BarretLee, 650 阅读, 6 评论, 收藏, 编辑 一.前言 什么是模板引擎,说的简单点,就是一个 ...

  9. Smarty模板引擎技术

    Smarty模板引擎技术 什么是模板引擎? 什么是Smarty模板引擎? 为何选择Smarty模板引擎? 如何使用Smarty模板引擎? 一.历史背景 场景一:回顾之前编写PHP项目的方式 //链接数 ...

随机推荐

  1. 探讨Web组件化的实现

    CMS组件化,简单架构示意图: Web组件使用WebPage+WebAPI的好处: Ø  组件复用(组件条件管理页面复用+获取组件数据API复用). Ø  组件是分布式的第三方应用,本身高内聚.组件之 ...

  2. C语言、Java的编译系统

    Java是跨平台的. Java代码的编译是由Java语言的编译器来执行的,执行后生成的是.class文件,该文件是字节码文件. 然后交给虚拟机进行运行,虚拟机是在各个平台上可移植的.从而决定了Java ...

  3. struts2自己定义拦截器

    首先是struts2框架中基本的两个文件:一个是拦截器类,另外一个是struts.xml配置文件. 简单来说,一个是说明要做的事,一个是说明在哪里做的. 拦截器类 package com.test.i ...

  4. sqlServer将多字段设为主键方法

    补充一下关于数据库多字段复合主键的设置. 首先一个表是不能有多个主键的.但是可以有多个字段组合成一个主键,这就是为什么有时候表里为什么会有多个字段都有主键的标志,那是因为他们组合成了一个主键了.我们可 ...

  5. oracle5

    oracle中事务处理 什么是事务 事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml(数据操作语言:增删改,没有查询)语句要么全部成功,要么全部失败. 如:网上转账就是典型的要用事 ...

  6. spring beans源码解读之--bean definiton解析器

    spring提供了有两种方式的bean definition解析器:PropertiesBeanDefinitionReader和XmLBeanDefinitionReader即属性文件格式的bean ...

  7. register_globals(全局变量注册开关)

    register_globals,是php.ini文件里面的一个配置选项,接下来,我们可以通过例程来分析一下,当register_globals = on 与 register_globals = o ...

  8. JSPatch 成长之路

    在这次 GMTC 大会上,我见到了 JSPatch 的作者 bang.在这之前我就和他在网上认识并聊过很多次,bang 也在这个公众号上投稿发表了多篇关于 JSPatch 的文章,包括:JSPatch ...

  9. 我的 ubuntu 12.04.2修复Grub

    网上有很多…… 首先我做了U盘启动,然后进入LiveCD模式. 输入grub,提示说要重新安装,好了,那就安装吧,连好网,sudo apt-get install grub 安装成功后,sudo -i ...

  10. mybatis根据property获取column

    mybatis根据property获取column mybatis根据类的属性获取xml文件中对应的column mybatis获取xml文件中property对应的column >>&g ...