简单模板类

MyMiniSmarty.class.php

View Code
 1 <?php
 2     /**
 3     * 模板类
 4     * 1、读取模板文件
 5     * 2、把模板文件替换成可以运行的php文件
 6     * 3、包含缓存机制--文件
 7     */
 8     
 9     class MyMiniSmarty {
10         //var 为了兼容低版本
11         var $template_dir = './templates/'; //模板文件
12         var $compile_dir = './templates_c/'; //编译后文件
13         var $tpl_vars = array(); //存放模板值的数组
14         
15         //给模板值
16         function assign($tpl_var, $var = null) {
17             if ('' != $tpl_var) {
18                 $this->tpl_vars[$tpl_var] = $var;
19             }
20         }
21         //替换占位符编译成可运行文件
22         function display($tpl_file) {
23             $tpl_file_path = $this->template_dir . $tpl_file;
24             $complie_file_path = $this->compile_dir . 'com_' . $tpl_file . '.php';
25             if (!file_exists($tpl_file_path)) {
26                 return false;
27             }
28             //判断是否有缓存文件,以前编译过,检查模板文件和编译文件修改时间
29             if (!file_exists($complie_file_path) || filemtime($tpl_file_path) > filemtime($complie_file_path)) {
30                 $fpl_file_con = file_get_contents($tpl_file_path);
31             
32                 //核心是正则替换
33                 
34                 $pattern = array(
35                     '/\{\s*\$([a-zA-Z_]\w*)\s*\}/i'
36                 );
37                 $replace = array(
38                     '<?php echo $this->tpl_vars["${1}"] ?>'    
39                 );
40                 
41                 $new_str = preg_replace($pattern, $replace, $fpl_file_con);
42                 
43                 file_put_contents($complie_file_path, $new_str);
44             }
45             
46             
47             
48             
49             //引用编译后的文件
50             include($complie_file_path);
51         }
52         
53     }
54 ?>

intro.php

View Code
<?php
    require 'MyMiniSmarty.class.php';
    $mysmarty = new MyMiniSmarty;
    
    $mysmarty->assign('title', '模板标题');
    $mysmarty->assign('content', '模板内容');
    $mysmarty->display('intro.tpl');
?>

intro.tpl

View Code
<html>
<head>
<meta content="text/html" charset="utf-8"/>
<title>{$title}</title>
</head>
<body>
{$content}
</body>
</html>

模板机制在于,简单标签代替php代码,使逻辑代码和页面设计分离,同时加入文件缓存等机制

 

posted @ 2013-02-26 20:44  Caps  阅读(196)  评论(0编辑  收藏  举报