PHP模板解析函数汇总(一) 收藏
2009年08月30日


此模板函数提供的标签及功能:
1,添加注释
{*   *}
2,输出变量
{$i}  

//需要对变量进行格式化,可以使用{code()}标签来执行一个函数进行格式化输出
3,包含一个动态文件
{include()}
4,包含一个静态文件
{echofile()}
5,嵌套一个模板
{template()}
6,判断,分支
{if()}

{elseif()}  {else} {/if}
7,循环
{while()}   {/while}
{foreach()} 

{/foreach}
8,执行一段PHP代码,包括赋值,函数等等等等
{code()}
有了这些东西,基本上就没有什么工作完成不了了。
内附比较详细的使用说明


/*   
作者: 牛哄哄   
Q Q: 455703030   
*/   
function template($template,$cacheFile,$set)    
{    
is_readable($template) || exit('模板文件不存在!');    
filemtime($template) > @filemtime($cacheFile) && parse_template($template,$cacheFile);    
$inTemplate = true;    
is_readable($cacheFile) ? include $cacheFile : exit('无法读取缓存,缓存路径可能有误!');    
}   

function parse_template($template,$cacheFile='')    
{    
$content = file_get_contents($template);    
$content = preg_replace('/\{\*([^\{\}]*)\*\}/','',$content);    
$content = preg_replace('/\$([A-Za-z0-9_]+)/','$set[\'\\1\']',$content);    
$content = preg_replace('/\$\[([A-Za-z0-9_]+)\]/','$\\1',$content);    
$content = preg_replace('/\{\$([A-Za-z0-9_\[\]\'"]+)\}/','<? echo $\\1; ?>',$content);    
$content = preg_replace('/\{include\(([^\{\}]+)\)\}/','<? include \\1; ?>',$content);    
$content = preg_replace('/\{echofile\(([^\{\}]+)\)\}/','<? echo file_get_contents(\\1); ?>',$content);    
$content = preg_replace('/\{code\(([^\{\}]+)\)\}/','<? \\1; ?>',$content);    
$content = preg_replace('/\{if\(([^\{\}]+)\)\}/','<? if (\\1) { ?>',$content);    
$content = preg_replace('/\{elseif\(([^\{\}]+)\)\}/','<? } elseif(\\1) { ?>',$content);    
$content = preg_replace('/\{while\(([^\{\}]+)\)\}/','<? while (\\1) { ?>',$content);    
$content = preg_replace('/\{foreach\(([^\{\}]+)\)\}/','<? foreach (\\1) { ?>',$content);    
$content = str_replace(array('{else}','{/if}','{/while}','{/foreach}'),array('<? }else{ ?>','<? } ?>','<? } ?>','<? } ?>'),$content);    
if (preg_match_all('/\{template\(([^\{\}]+)\)\}/',$content,$tplName))    
{    
  foreach ($tplName[1] as $value) $tplContent[] = parse_template(eval('return '.$value.';'));    
  $content = str_replace($tplName[0],$tplContent,$content);    
}    
if ('' == $cacheFile) return $content;    
@file_put_contents($cacheFile,'<? true===$inTemplate || exit(\'非法访问!\'); ?>'.$content);    
}  


template1.func.rar



 

本文永久链接: http://www.zzxj.net/blog/fxs_2008/archive/2009/08/30/53.html

发表于 @ 2009年08月30日 |评论(loading... )|收藏

发表评论 姓  名: