A-A+

手写smarty迷你模板类

2014年02月01日 PHP技术文章 评论 5 条 阅读 346 views 次

php代码与html代码写在一起,很不方便修改,因此要把php与html彻底分离,也就是controller(业务)与view(表现)的分离。

如果使用原生php输出,不用解析标签程序执行更快,那为什么还要用smarty模板呢?模板使用比较广泛,学习了解模版思想,达到自己写模板,比如ecshop用的改进后的smarty模板

smarty的2个大版本,3,和2.6,区别: 2.6是PHP4时代的写作风格,smarty3,是纯面向对象的写作风格.

迷你模板类:接收模板文件,编译成执行的PHP文件,返回编译后的PHP文件,如果不修改模板,可以一次编译可重复使用;

模板类的第1步:把标签解析PHP输出语句,模板文件-->PHP文件,为了目录清晰,我们把模板和编译后的结果,放在不同的目录里.用2个属性来记录这2个目录
class mini {
public $template_dir = ''; // 模板文件所在的位置
public $compile_dir = ''; // 模板编译后存放的位置

// 定义一个数组,用来接收外部的变量
public $_tpl_var = array();

public function assign($key,$value) { //接收外部变量titel
$this->_tpl_var[$key] = $value; //放入数组中
}

public function display($template) {
$comp = $this->compile($template);
include($comp);
}

public function compile($template) {

// 读出模板内容
$temp = $this->template_dir . '/' . $template;
$source = file_get_contents($temp); //读出模板内容
// echo $source;

$comp = $this->compile_dir . '/' . $template . '.php';

// 判断模板是否已经存在,
if(file_exists($comp) && filemtime($temp) < filemtime($comp)) { //先判断编译文件是否存在,并且模板文件修改时间要小于编译后文件修改时间,来判断模

板是否有修改
return $comp;
}
// 替换模板内容
$source = str_replace('{$','',$source);

// echo $source;
// 再把编译后的内容保存成 .php文件
file_put_contents($comp,$source);

return $comp; //返回编译后的文件
}
}

在控制页面04.php中

include('./mini.php'); //引用mini类文件
$mini = new mini(); //实例化mini
$mini->template_dir = './templates'; //定义模板文件目录
$mini->compile_dir = './compile'; //定义编译后php文件目录

//数据库读取数据
$title = '两会召开';
$content = '好会议,好房子,好奶粉';

放入_tpl_var数组中,让变量在编译后的php文件中输出
$mini->assign('title',$title);
$mini->assign('content',$content);

$mini->display('04temp.html'); //调用display返回编译后的文件

总结:$smarty的工作流程,1:把需要显示的全局变量,赋值,塞到对象内部的属性上,放到一个数组里,2:编译模板,把{$标签},解析成相应的php echo 代码,3:引入编译后的PHP文件

使用smarty的步骤:1:smarty是一个类,要使用,需先引入并实例化,2:assign赋值
3:display [编译到输出]

smarty之辩:1:编译模板,浪费时间,2:要把变量再重新赋值到对象的属性上,增大的开销.

标签:

5 条留言  访客:5 条  博主:0 条

  1. 彩虹之家

    我默默地来,默默的走开,不带走一片云彩!

  2. SEO分析中心

    能加个Q,做个好友吗?或者换个友链

  3. maillot trek

    这都是学问,可我就是看不明白~

  4. 电子商务文摘

    代码小白 来支持一下

  5. 恋羽

    我一直怀疑现在模板存在的必要性

给我留言