PHP的模板引擎smarty道理
mvc是开辟中的一个巨大的头脑,使得开辟代码有了越发清楚的条理,让代码分为了三层各施其职、无论是对代码的编写以及后期的浏览和保护,都供应了很大的轻易。
我们在php开辟中,视图层view是不允许有php代码来操纵数据库之类的来猎取数据的,我们平常都会在控制器层controller,就已把视图层要展现的数据准备好,轻易视图层直接用来展现。
smarty模板手艺,能够让数据和视图举行星散,让视图中不能直接涌现php代码。如许的话,让前段页面的开辟和背景数据的开辟,能够左右开弓,同时举行了。
smarty模板的运用比较简朴,重要有两个异常中心的函数。一个是assig(),把模板中要运用的数据举行赋值,一个是display(),用来剖析和展现末了的视图模板。
相干引荐:《PHP教程》
运用的简朴代码以下:
include_once "Smarty.class.php";//引入smarty类 $smarty = new Smarty;//建立smarty对象 $smarty->assign("name","zhangmiao");//赋值,以备模板中运用 $smarty->assign("age","18"); $smarty->display('index.tpl');//引入模板,展现视图页面
我们看下模板源代码是如许的:
<h1>测试模板1</h1> 我的名字是:{$name}<br/> 我的年岁是:{$age}<br/>
浏览器页面是如许的:
疑问:我们模板中没有php代码,我们只用了{$name}和{$age}就能把对应的变量给展现了出来,是什么鬼呢?
然后,我们一看smarty编译后的文件是如许的:
<h1>测试模板1</h1> 我的名字是:<?php echo $this->var["name"]; ?><br/> 我的年岁是:<?php echo $this->var["age"]; ?><br/>
原来如此,终究照样变成了含有php代码的模板,然则这个模板中把标签转成php代码的事情,我们交给了smarty模板引擎来完成的。
那究竟smarty模板引擎是怎样把模板内里的非php代码的标签,转变成被终究能够剖析实行的php代码的呢?
重要思绪是:替代。
分成了两步:
1、经由过程assign函数把要剖析的标签变量赋值
2、经由过程display函数把标签替代成对象的php变量
我们依据这个思绪,本身也写了个简易版的smarty模板引擎,算是多smarty模板引擎设想道理的一种明白。然则只能剖析单个变量的标签,其他标签均没有处置惩罚。代码以下:
class MySmarty{ //模板寄存途径 public $template = './template/'; //编译后模板途径 public $template_c = './template_c/'; //寄存变量的数组,经由过程assign函数赋值 public $var = array(); //变量赋值 public function assign($vkey,$value){ if($vkey != ""){ $this->var[$vkey] = $value;//把要模板中剖析的数据压入数组 } } //模板中变量替代 public function display($path){ $template_path = $this->template.$path; $template_c_path = $this->template_c.$path.".php"; if(!file_exists($template_path)){ return false; } //只要剖析后的模板文件不存在或许模板源文件有新的修改的情况下 从新剖析模板 if(!file_exists($template_c_path) || filemtime($template_path)>filemtime($template_c_path)){ //猎取模板源文件,用来替代 $template_content = file_get_contents($template_path); $pattern = array( '/\{\s*\$([a-zA-Z][a-zA-Z0-9_]*)\s*\}/i' ); $replace = array( '<?php echo $this->var["${1}"]; ?>' ); //用正则去替代模板源文件中的变量标记{$varname} $res = preg_replace($pattern,$replace,$template_content); //编译后文件写入某个目次 file_put_contents($template_c_path,$res); } //引入编译后文件,实在就是实行了谁人php文件的代码 include_once $template_c_path; } }
我们挪用本身的assign和display放入引入,也能一般剖析运用啦。
以上就是php模板引擎道理是什么的细致内容,更多请关注ki4网别的相干文章!