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

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

<?php 

class template{

	//存储模板引擎源文件目录
	private $templateDir;
	//编译后的文件目录
	private $compileDir;
	//边界符号	左边界
	private $leftTag="{#";
	//边界符号	右边界
	private $rightTag="#}";
	//当前正在编译的模板文件名
	private $currentTemp=‘‘;
	//当前源文件中的html代码
	private $outputHtml;
	//变量池
	private $varPool=array();

	//构造函数 传入模板文件目录  编译文件目录
	public function __construct($templateDir,$compileDir,$leftTag=null,$rightTag=null){
		$this->templateDir=$templateDir;
		$this->compileDir=$compileDir;
		if(!empty($leftTag))	$this->leftTag=$leftTag;
		if(!empty($rightTag))	$this->rightTag=$rightTag;
	}
	//往变量池中写入数据
	public function assign($tag,$var){
		$this->varPool[$tag]=$var;
	}
	//从变量池中取出数据的方法
	public function getVar($tag){
		return $this->varPool[$tag];
	}
	//获得源文件内容
	public function getSourceTemplate($templateName,$ext=‘.html‘){
		$this->currentTemp=$templateName;
		//拿到完整路径
		$sourceFilename=$this->templateDir.$templateName.$ext;
		//获得源文件中的html代码
		$this->outputHtml=file_get_contents($sourceFilename);
	}
	//创建编译文件
	public function compileTemplate($templateName=null,$ext=‘.html‘){
		$templateName=empty($templateName)?$this->currentTemp:$templateName;
		//开始正则匹配
		$pattern	=	‘/‘.preg_quote($this->leftTag);
		$pattern	.=	‘ *\$([a-zA-Z]\w*) *‘;
		$pattern	.=	preg_quote($this->rightTag).‘/‘;

		$this->outputHtml=preg_replace($pattern, ‘<?php echo $this->getVar(\‘$1\‘) ?>‘, $this->outputHtml);
		//编译文件完整路径
		$compileFilename=$this->compileDir.md5($templateName).$ext;
		file_put_contents($compileFilename, $this->outputHtml);
	}
	//模板输出
	public function display($templateName=null,$ext=‘.html‘){
		$templateName=empty($templateName)?$this->currentTemp:$templateName;
		include_once $this->compileDir.md5($templateName).$ext;
	}
}

	$baseDir=str_replace(‘\\‘, ‘/‘, dirname(__FILE__));
	$temp=new template($baseDir.‘/source/‘,$baseDir.‘/compiled/‘);
	$temp->assign(‘title‘,‘学PHP的小蚂蚁‘);
	$temp->assign(‘name‘,‘小蚂蚁‘);
	$temp->getSourceTemplate(‘index‘);
	$temp->compileTemplate();
	$temp->display();
 ?>

类库很简单,主要是领悟一下模板引擎的工作原理,顺便在领悟一下OOP的编程思路。

preg_match_all()不但能获取总模式,还能将子模式匹配出来。0键为总模式匹配结果。1~n为子模式。

preg_replace()同理  $1 和 \\1 是一样的。

<! doctype <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
	<title>{#$title#}</title>
</head>
<body>
	我的名字是:{#$name#}
</body>
</html>

正则表达式结束。over.

时间: 2024-10-26 03:25:19

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

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

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

前端学PHP之Smarty模板引擎

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

Smarty模板引擎技术(一)

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

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

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

Smarty模板引擎

Smarty模板引擎是一个完全由PHP程序写出来的模板引擎,优点如下: 速度:Smarty模板引擎相比其他的模板引擎速度更快 继承技术:在Smarty里面可以定义一个父模板,让子模板来继承父模板 缓存技术:可以让一个不怎么变化但是偶尔会变化的页面缓存起来.下一次客户端请求的时候直接将缓存文件给它

(5) PHP 随笔---Smarty模板引擎 使用成熟的Smarty模板 05

◇Smarty模板引擎流程图,如下: ◇使用Smarty使得程序的速度有略微的降低了. ◇如何使用Smarty,步骤如下: ◇Smarty里的核心资源都放在libs文件夹中了.直接使用libs就好了. ◇把libs文件夹放到当前开发目录下,然后利用  include "./lib/Smarty.class.php";  将文件引用. ◇接下来实例化Smarty对象即可. ◇新建一个模板文件夹,取名为templates,用来存放模板文件夹. ◇新建一个编译文件夹,取名为templates

Smarty模板引擎技术(二)

一.使用Smarty模板引擎步骤 第一步:引入smarty核心类文件并创建一个smarty实例对象: include_once “libs/smarty/Smarty.class.php”; $smarty=new Smarty(); 第二步:对核心类中属性或变量的配置 $smarty->template_dir=”./templates”; $smarty->compile_dir=”./templates_c”; $smarty->config_dir=”./configs”; $s

smarty模板引擎基础(二)

smarty模板引擎所需文件夹共可分为存放页面缓存的(cache).存放配置文件的(configs).存放模板扩充插件的(plugins).存放模板文件的(templates).存放编译后的模板文件的(templates_c).存放后端程序代码的(main); 一.configs文件夹:即保存一些与页面配置有关的相关代码,可以用[]来进行模块分类 ,以conf格式保存,可用记事本打开查询,在页面中的调用指令为 <{config_load file='文件名' section="模块名&qu

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

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