smarty初步认识

 

b.php

//本文件使用模板类
//首先包含该模板文件
include("MyTpl.php");
//创建模板对象  new
$tpl = new MyTpl();


$title="smarty学习";
$content="smarty模板的介绍";
//分配变量
$tpl->assign("title",$title);
$tpl->assign("content",$content);
//调用模板文件
//$a = $tpl->tpl_replace(file_get_contents("./templates/a.html"))
//echo $a;
$tpl->display("a.html");

templates目录下有a.html

<html>
 <head>
   <title><{ $title }></title>
 </head>
 <body>
   <p><{  $content  }></p>
 </body>
</html>

MyTpl.php

class MyTpl{
 /*
 声明 $template_dir属性,保存模板文件所在路径
 声明 $compile_dir属性,保存编译后文件所在路径

*/

public  $template_dir="./templates";
public  $compile_dir="./templates_c";
public  $tpl_vars=array();
 
/*
 *public private protected
 *
 * $tpl=new MyTpl("./templates/","./templates_c/");
 * 
 */
function __construct($template_dir="./templates",$compile_dir="./templates_c"){  
 
  $this->template_dir=rtrim($template_dir,'/').'/';
  $this->compile_dir=rtrim($compile_dir,'/').'/';
  $this->tpl_vars=array();

}


/*
*如何实现将php文件中声明的变量 分配到html(tpl)文件
*   assign()
*   需要两个参数$tpl_var,$value  
*   $tpl_var---出现在模板文件(*.html、*.tpl)中变量的名称
*  $value-----模板文件中对应变量的值,来自于php文件
*/

function assign($tpl_var,$value=null){
   if($tpl_var!=""){
   $this->tpl_vars[$tpl_var]=$value;
   
   }
}

/*
* 实现模板文件的调用
* display("模板文件名")
* 第一步:从模板文件中获取<{$titlename}> 结构
* 第二步:替换成<?php echo $titlename;?> 语法
*
*
*
*/

//$content---整个模板文件
//功能:从指定的模板文件中获取所有的<{$titlename}>结构,全部替换成<?php echo $titlename;
function tpl_replace($content) {

/*
*preg_replace();
*mixed preg_replace(正则表达式,替换成,被替换对象)
*
*
*
*/
//定义模板文件中<{$title}>结构的正则表达式
$pattern = '/\<\{\s*\$([a-zA-Z_\x7f-\xff][0-9a-zA-Z_\x7f-\xff]*)\s*\}\>/i';

//替换后:<?php echo $title;?  格式
//本文件中保存变量采取 $this->tpl_vars[$tpl_var]=$value;
//注意正则表达式中()的作用,参见第九章
$replacement= '<?php echo $this->tpl_vars["${1}"];?>';

//替换后返回一个新的html文件
$repcontent = preg_replace($pattern,$replacement,$content);

return $repcontent;

}


//将tpl_replace方法里返回的新文件保存到templates_c下
//$fileName--*.html 或者 *.tpl
function display($fileName){
     //$this->template_dir="./templates";
  //$fileName="a.html";
  //$this->template_dir.$fileName="./templates/a.html"
  $tplFile=$this->template_dir.$fileName;
 
  //将编译后的文件保存到templates_c
 
  //file_get_contents()
 
  $repcontent = $this->tpl_replace(file_get_contents($tplFile));

     //将该编译后文件存储到templates_c里 com_***.php
  //pathname() basename() dirname() pathinfo()
  //  ./templates_c/com_a.php
 
     $comFileName = $this->compile_dir."com_".basename($tplFile).".php";
 
  //将变量$repcontent写入到com_a.php文件
   $handle=fopen($comFileName,"w+");
   fwrite($handle,$repcontent);
   fclose($handle);
  
   include($comFileName);

}


}

自动生成的文件com_a.html.php

<html>
 <head>
   <title><?php echo $this->tpl_vars["title"];?></title>
 </head>
 <body>
   <p><?php echo $this->tpl_vars["content"];?></p>
 </body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值