smarty模板引擎原理解析

//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 display
 param 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模板引擎原理解析

时间: 2024-11-07 04:14:15

smarty模板引擎原理解析的相关文章

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

随着 web 发展,前端应用变得越来越复杂,基于后端的 javascript(Node.js) 也开始崭露头角,此时 javascript 被寄予了更大的期望,与此同时 javascript MVC 思想也开始流行起来.javascript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注,近一年来在开源社区中更是百花齐放,在 Twitter.淘宝网.新浪微博.腾讯QQ空间.腾讯微博等大型网站中均能看到它们的身影. 本文将用最简单的示例代码描述现有的 javascript 模板引擎

JavaScript模板引擎原理,几行代码的事儿

JavaScript模板引擎原理,几行代码的事儿 什么是模板引擎,说的简单点,就是一个字符串中有几个变量待定.比如: var tpl = 'Hei, my name is <%name%>, and I\'m <%age%> years old.'; 通过模板引擎函数把数据塞进去, var data = { "name": "Barret Lee", "age": "20" }; var result

JavaScript模板引擎原理与用法

这篇文章主要介绍了JavaScript模板引擎原理与用法,结合实例形式详细分析了javascript模版引擎相关概念.原理.定义及使用方法,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下 一.前言 什么是模板引擎,说的简单点,就是一个字符串中有几个变量待定.比如: var tpl = 'Hei, my name is <%name%>, and I\'m <%age%> years old.'; 通过模板引擎函数把数据塞进去, var data = { &q

Smarty模板引擎技术(一)

一.Smarty模板引擎简介 什么是smarty? Smarty是采用php写的一个模版引擎,设计的目的是要将php代码与html代码分离,使php程序员只专注于php代码的编写,网页美工只专注于网页的美化 没有模版引擎时出现的问题? html中php代码比重越来越大 页面的数量越来越多 程序设计与美工设计分工不明确 传统的php文件: 1. php代码跟html混编在一起,不利于程序员和美工的分工,程序员和美工不能同时修改一个文件 2.数据的传递同一页面传递,php数据在页面中的显示需要使用p

编写一个非常简单而且山寨的smarty模板引擎

PHP的正则表达式今天就结束了,遥想几年前初次接触的时候,感觉这玩意真心玩不转啊,而时至今日,感觉这也没有什么难以理解的,确实还是有很大进步的,尤其是对smarty模板引擎有了一个更为清晰的认识.正则表达式学到最后,总是会抛出这个编写一个山寨的smarty模板引擎的话题出来练练手,今天就在大师的指导下,编写了这么一个山寨smarty,作为这次复习正则的一个句点吧. <?php  class template{ //存储模板引擎源文件目录 private $templateDir; //编译后的文

ThinkPHP整合Smarty模板引擎的使用以及查询方法汇总

其实说到整合smarty我们根本就没有作什么,要做的主要还是对于模板分配各种变量的使用,这才是重点,其次还有一些配置信息要自己去填写;先说一下配置,同样的,在主目录的common下面的config文件,把配置信息写入里面就可以了,其中主要有下面一下的配置信息. 'TMPL_ENGINE_TYPE'      =>  'Smarty', //'TMPL_L_DELIM'          =>  '<{',            // 模板引擎普通标签开始标记 //'TMPL_R_DELI

PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP

smarty模板引擎类简单工作原理 利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件.例如 模板文件中{$title} 利用正则表达式找到并替换成  <?php echo $this->vars['title'];?> 自定义 Smarty 模板引擎类 smarty.class.php页面 <?php /*  * 自定义Smarty模板引擎类  */         class Smarty{             priva

smarty模板引擎(一)基础知识

一.基本概念 1.什么是mvc? mvc是一种开发模式,核心思想是:数据的输入.数据的处理.数据显示的强制分离. 2.什么是smarty? smarty是一个php的模板引擎.更明确的来说,它可以帮助开发者更好的分离程序逻辑和页面显示. 3.smarty运行原理 模板文件,就是一个显示数据的模板,其中需要显示的数据用占位符代替. smarty运行时,会读取模板文件,将模板文件中的占位符替换成真正的数据,并输出一个处理后的php文件,交由服务器运行. 二.自己写一个smarty模板 为了更好的理解

前端学PHP之Smarty模板引擎

前面的话 对PHP来说,有很多模板引擎可供选择,但Smarty是一个使用PHP编写出来的,是业界最著名.功能最强大的一种PHP模板引擎.Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进.文字环绕以及正则表达式都可以直接使用,如果觉得不够,SMARTY还有很强的扩展能力,可以通过插件的形式进行扩充.另外,Smarty也是一种自由软件,用户可以自由使用.修改,以及重新分发该软件.本文将详细介绍Smarty模板引擎 概述 Smarty是一个php模板引擎.更准确的说,它分离了逻辑程序和外