大量二手笔记本电脑和台式电脑便宜甩卖!,更多更详细请点击进入~!

一个简单的模板类--编译型的(simplet类增强后)

为方便你的阅读请选择文章字体大小: 微小 细小 中小 标准 ->行高大小: 细小 标准

大量二手笔记本电脑和台式电脑便宜甩卖!,更多更详细请点击进入~!
在上次发布的simplet类之后(http://bbs.phpchina.com/thread-85257-1-1.html),发现有很多缺陷,例如不支持多维数组,注释和没有缓存功能,这次我把这些功能都加进去了!!!
大家有兴趣的话,我下次出个教程,来谈谈我写这个类的一些思想和方法!!!支持的话可以跟贴支持我!
PHP代码:
simplet.class.php
<?
php
class SimpleT 
{
    private 
$t_vars
;
    private 
$templates_dir
;
    private 
$templates_c_dir
;
    private 
$cache
;
    private 
$cache_dir
;
    
    public function 
__construct
() {
        
$this->templates_dir './templates/'
;
        
$this->templates_c_dir './templates_c/'
;
        
$this->cache 0
;
        
$this->cache_dir './cache/'
;
    }
    public function 
setDir($dir$type 'template'
) {
        if(
is_dir($dir
)) {
            if(
$type == 'template'
)
                
$this->templates_dir rtrim($dir'/').'/'
;
            elseif(
$type == 'template_c'
)
                
$this->templates_c_dir rtrim($dir'/').'/'
;
            elseif(
$type == 'cache'
)
                
$this->cache_dir rtrim($dir'/').'/'
;
            else
                return 
false
;
            return 
true
;
        } else {
            return 
false
;
        }
    }
    
    public function 
cache($time
) {
        if(
is_numeric($time
)) {
            
$this->cache $time
;
            return 
true
;
        } else {
            return 
false
;
        }
    }
    
    public function 
assign($var$value NULL
) {
        if (
is_array($var
)) {
            foreach (
$var as $key => $val
) {
                
$this->t_vars[$key] = $val
;
            }
        } else {
            
$this->t_vars[$var] = $value
;
        }
    }
    private function 
comp($filename
) {
        try {
            if(!
$fp fopen($filename'r'
)) {
                throw new 
Exception('Can not open ' $filename
);
            }
            
$filesize filesize($filename
);
            if(
$filesize <= 0
) {
                throw new 
Exception('The file size must > 0 ' 
);
            }
            
$content fread($fp$filesize
);
            
fclose($fp
);
            unset(
$fp
);
            
            
$content preg_replace("/<%=([\$a-zA-Z0-9_]{1,})%>/","<?php echo \\$$1 ;?>"$content
);
            
$content preg_replace("/<%([\$a-zA-Z0-9_]{1,})\.loop%>/""<?php foreach(\\$$1 as \\$$1_key => \\$$1_val) { ?>",$content
);
            
$content preg_replace("/<%([\$a-zA-Z0-9_]{1,})\.loop\(([\$a-zA-Z0-9_]{1,})\)%>/""<?php foreach(\\$$1 as \\$$2) { ?>"$content
);
            
$content preg_replace("/<%([\$a-zA-Z0-9_]{1,})\.loop\(([\$a-zA-Z0-9_]{1,}),([\$a-zA-Z0-9_]{1,})\)%>/""<?php foreach(\\$$1 as \\$$2 => \\$$3) { ?>"$content
);
            
$content preg_replace("/<%([\$a-zA-Z0-9_]{1,})\.key%>/""<?php echo \\$$1_key ;?>"$content
);
            
$content preg_replace("/<%([\$a-zA-Z0-9_]{1,})\.value%>/""<?php echo \\$$1_val ;?>"$content
);
            
$content preg_replace("/<%([\$a-zA-Z0-9_]{1,})\\?%>/""<?php if(\\$$1 == true) { ?>"$content
);
            
$content preg_replace("/<%end%>/","<?php } ?>"$content
);
            
$content preg_replace("/<%##common##%>([^<%##end##%>]{0,})<%##end##%>/""<?php\n/* $1 */\n?>"$content
);
            if (
preg_match_all("/<%{([^(}%>)]{1,})}%>/"$content$files
)) {
                
$this->comp($this->templates_dir $files[1][0
]);
            }
            
$content preg_replace("/<%{([^(}%>)]{1,})}%>/""<?php include '{$this->templates_c_dir}simplet_comp_$1.php'; ?>"$content
);
            echo 
$content
;
            
$fp fopen($this->templates_c_dir 'simplet_comp_' basename($filename) . '.php''w'
);
            if(!
fwrite($fp$content
)) {
                throw new 
Exception('Can not write content in the ' $filename
);
            }
            
fclose($fp
);
        } catch (
Exception $e
) {
            echo 
$e->getMessage
();
        }
        return 
true
;
    }
    public function 
display($filename
) {
        
$filename $this->templates_dir $filename
;
        if(!
file_exists($filename
)) {
            return 
false
;
        }
        
$t_filename_c $this->templates_c_dir 'simplet_comp_' basename($filename) .'.php'
;
        if(!
file_exists($t_filename_c) || filemtime($t_filename_c) < filemtime($filename
)) {
            
$this->comp($filename
);
        }
        if(
$this->cache 0
) {
            
$cache_file $this->cache_dir basename($filename
);
            if(!
file_exists($cache_file) || (time() - filemtime($cache_file)) > $this->cache
) {
                
ob_start
();
                foreach (
$this->t_vars as $key => $val
) {
                    $
$key $val
;
                }
                include(
$t_filename_c
);
                
$content ob_get_contents
();
                
ob_end_clean
();
                
$fp fopen($cache_file'w'
);
                
fwrite($fp$content
);
                
fclose($fp
);
                echo 
$content
;
                unset(
$content
);
            } else {
                include(
$cache_file
);
            }
        } else {
            foreach (
$this->t_vars as $key => $val
) {
                $
$key $val
;
            }
            include(
$t_filename_c
);
        }
        
    }
}
?>
PHP代码:
test.php

<?
php
require_once('simplet.class.php'
);

$t = new SimpleT
();
$t->cache(10);
//开启cache功能,并且设置为过期时间为10秒
$t->assign('arrays', array(array('hello','world'
)));
$t->assign('condition',false
);
$t->display('index.php'
);
?>
PHP代码:
index.php(模板文件,放在templates/文件夹里)

<%
##common##%>
这里是注释
下面是多维数组循环
<%
##end##%>
<%arrays.loop(value
)%>
    <%
value.loop(name
)%>
        <%=
name
%>
    <%
end
%>
<%
end
%>

<%
##common##%>
下面是条件判断
<%
##end##%>
<%condition
?%>
    <
h1>Condition is true</h1
>
<%
end
%>

<%
##common##%>
下面是包含文件
()
<%
##end##%>
<%{filename.php}%>

相关栏目

广而告之

    大量二手笔记本电脑和台式电脑便宜甩卖!,更多更详细请点击进入~!

其它内容关注