喜悦国际村 » 喜悦原创 » 没事玩写的30行的模板功能很简单

页: [1]
zshtom2007-10-22 02:01 PM
没事玩写的30行的模板功能很简单

<?php
/**
* @author zshtom
* @copyright zshtom [email]0304681@126.com[/email] 2007-2008
*/
function zTemplate($filename, $templatedir='', $compliedir=''){
        $comtime = @filemtime($compliedir.md5($filename).".php");//编译时间
        $temtime = @filemtime($templatedir.$filename);//模板时间
        if($temtime > $comtime){//是否重新写入模板
                $str = file_get_contents($templatedir.$filename);
                $str = preg_replace('|<!--{if (.+)}-->|isU', '<?php if(\\1){ ?>', $str);
                $str = preg_replace('|<!--{/if}-->|isU', '<?php } ?>', $str);
                $str = preg_replace('|{\$(.*)}|isU', '<?php echo $\\1; ?>', $str);
                $str = preg_replace('|<!--{else}-->|isU', '<?php }else{ ?>', $str);
                $str = preg_replace('|<!--{elseif (.*)}-->|isU', '<?php }elseif(\\1){ ?>', $str);
                $str = preg_replace('|{eval (.*)}|isU', '<?php \\1; ?>', $str);
                $str = preg_replace('|{echo (.*)}|isU', '<?php echo \\1; ?>', $str);
                $str = preg_replace('|{include_php (.*)}|isU', '<?php if(is_file("\\1.php")){ include_once("\\1.php");} ?>', $str);
                $str = preg_replace('|{include_htm(.*) (.*)}|isU', '<?php if(is_file("\\2.htm\\1")){ $str = file_get_contents("\\2.htm\\1"); echo $str;} ?>', $str);
                $str = preg_replace('|<!--{loop (.*) (.*) (.*)}-->|isU', '<?php if(is_array(\\1)){ foreach(\\1 as \\2 => \\3){  ?>', $str);
                $str = preg_replace('|<!--{/loop}-->|isU', '<?php }} ?>', $str);
                $str = preg_replace('|{template (.*)}|isU', '<?php include_once(zTemplate("\\1", "'.$templatedir.'", "'.$compliedir.'")); ?>', $str);
                @file_put_contents($compliedir.md5($filename).'.php', $str);
        }
        return $compliedir.md5($filename).'.php';//返回模板结果
}
include_once(zTemplate('template.html','template/', 'templates/'));
?>


用法简单 和dz的用法一样 没有加入语言功能 呵呵 可以自己改 ,没有测bug

<!--{if $val == 's'}-->
{$vals}
<!--{elseif $val == 'ss'}-->
{$vals}
<!--{/if}-->
<br />
{echo "des"}<br />
{$zsh}
<!--{loop $array $key $val}-->
{$val}<br />{$zsh}
<!--{/loop}-->
sed
{template test.htm}
hahah<br />

zshtom2007-10-23 02:26 AM
没人顶 自己顶 。。。。

zshtom2007-10-25 03:57 AM
没人理。。 哇哇哭

songlv2007-10-25 04:44 AM
我顶下吧

这行是凑字数的

zshtom2007-10-25 11:39 AM
。。。。。。

奶瓶2007-10-28 10:56 AM
我也凑一下,嘿嘿

songlv2007-10-29 06:06 AM
大家都来臭下啊

songlv2007-10-29 06:07 AM
错了,大家都来丑下啊

songlv2007-10-29 06:08 AM
错了,大家都来瞅下啊

zshtom2007-10-29 09:46 AM
晕倒 。。。。 咋能打字错误呢

songlv2007-10-29 10:13 AM
“抽”字挺难打啊

songlv2007-10-29 10:13 AM
又错了 是 “凑”字

jonyare2007-10-29 11:58 AM
我也来瞅下

剑枫2007-10-31 02:16 AM
呵呵,不错。。。。。和dz差不多吧

zshtom2007-11-1 05:52 AM
恩  和dz差不多 呵呵 原来用dz的 用着习惯了 很舒服 没事自己写一个呵呵

836872007-11-8 04:50 AM
呵呵 没人理

sorrowboy2007-11-10 02:22 PM
嗯。。。顶一下

个人认为 php模板的话,还是少用好,如果是C写的,那就可以考虑

因为PHP代码写的模板,在处理大页面时,速度并不是很快

可以考虑VC分离,在view页面里面直接写入<?php echo $var;?>,<?php while($i>0){?>lalla<?php $i--;}?> 之类,而在controller里取得$var,$i后载入view页面,然后生成缓存文件或静态页面。
这样的话,速度应该会比大量地用 正则替换要快。

zshtom2007-11-19 04:34 PM
呵呵 楼上 自己看下 我编译了 只有替换模板的一次编译并不是正则替换 呵呵

dreamstar2008-1-8 10:09 AM
顶一下

就顶一下。

zshtom2008-1-13 12:43 PM
谢谢楼上顶 。。。哈哈 虽然是一下。


查看完整版本: 没事玩写的30行的模板功能很简单


Powered by Discuz! Archiver 6.1.0  © 2001-2006 Comsenz Inc.
Processed in 0.006698 second(s), 2 queries