PHP模板解析引擎--discuz

转载 2006年06月18日 10:00:00
<?php

/*
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 :: [DISCUZ!]  Crossday Discuz! Board                                    ::
 :: (c) 2001-2005 Comsenz Technology Ltd (www.discuz.com)                ::
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 :: Author:  Crossday (tech@discuz.com) Cnteacher (cnteacher@discuz.com) ::
 :: Version: 2.6U   2005/04/20 17:00                                     ::
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 :: Discuz! 2.6 Unofficial Edit Author: bobgao (bobgao@gmail.com)        ::
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*/

if(!defined('IN_DISCUZ')) {
        exit(
'Access Denied');
}

function 
parse_template($file$templateid$tpldir) {
    global 
$language;

    
$nest 5;
    
$tplfile DISCUZ_ROOT."./$tpldir/$file.htm";
    
$objfile DISCUZ_ROOT."./forumdata/templates/{$templateid}_$file.tpl.php";

    if(!@
$fp fopen($tplfile'r')) {
        exit(
"Current template file './$tpldir/$file.htm' not found or have no access!");
    } elseif(!include 
language('templates'$templateid$tpldir)) {
        exit(
"<br>Current template pack do not have a necessary language file 'templates.lang.php' or have syntax error!");
    }

    
$plugins_languagepack DISCUZ_ROOT.'./plugins/plugin.lang.php';
    if(
file_exists($plugins_languagepack)) {
        include 
$plugins_languagepack;
        if (
count($plglang)){
            
$language array_merge($language,$plglang);
        }
    }
    unset(
$plugins_languagepack);

    
$template fread($fpfilesize($tplfile));
    
fclose($fp);
    
$var_regexp "((/$[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)([[a-zA-Z0-9-.[]_/"'$x7f-xff]+])*)"
    
$const_regexp "([a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*)";

    
$template preg_replace("/([nr]+)t+/s""/1"$template);
    
$template preg_replace("/<!--{(.+?)}-->/s""{/1}"$template);
    
$template preg_replace("/{langs+(.+?)}/ies""languagevar('/1')"$template);
    
$template str_replace("{LF}""<?=/"/n/"?".">"$template);

    
$template preg_replace("/{(/$[a-zA-Z0-9_[]'/"$x7f-xff]+)}/s""<?=/1".PHP_CLOSE_TAG$template);

    
$template preg_replace("/$var_regexp/es""addquote('<?=/1?'.'>')"$template);
    
$template preg_replace("/<?=<?=$var_regexp?>?>/es""addquote('<?=/1?>')"$template); 
    

    
$template preg_replace("/s*{templates+(.+?)}s*/is""n<?include template('/1'); ".PHP_CLOSE_TAG."n"$template);
    
$template preg_replace("/s*{evals+(.+?)}s*/ies""stripvtags('n<? /1  '.PHP_CLOSE_TAG.'n','')"$template);
    
$template preg_replace("/s*{echos+(.+?)}s*/ies""stripvtags('n<? echo /1; '.PHP_CLOSE_TAG.'n','')"$template);
    
$template preg_replace("/s*{elseifs+(.+?)}s*/ies""stripvtags('n<? } elseif(/1) { '.PHP_CLOSE_TAG.'n','')"$template);
    
$template preg_replace("/s*{else}s*/is""n<? } else { ".PHP_CLOSE_TAG."n"$template);

    for(
$i 0$i $nest$i++) {
        
$template preg_replace("/s*{loops+(S+)s+(S+)}s*(.+?)s*{/loop}s*/ies""stripvtags('n<? if(is_array(/1)) { foreach(/1 as /2) { '.PHP_CLOSE_TAG,'n/3n<? } } '.PHP_CLOSE_TAG.'n')"$template);
        
$template preg_replace("/s*{loops+(S+)s+(S+)s+(S+)}s*(.+?)s*{/loop}s*/ies""stripvtags('n<? if(is_array(/1)) { foreach(/1 as /2 => /3) { '.PHP_CLOSE_TAG,'n/4n<? } } '.PHP_CLOSE_TAG.'n')"$template);
        
$template preg_replace("/s*{ifs+(.+?)}s*(.+?)s*{/if}s*/ies""stripvtags('n<? if(/1) { '.PHP_CLOSE_TAG,'n/2n<? } '.PHP_CLOSE_TAG.'n')"$template);
    }
    
$template preg_replace("/{$const_regexp}/s""<?=/1".PHP_CLOSE_TAG$template);
    
$template preg_replace("/ ?>[nr]*<? /s"" "$template);

    
$template preg_replace("/ ?>[nr]*<?=/s"";n echo "$template);
    
    
$template "<? if(!defined('IN_DISCUZ')) exit('Access Denied'); ".PHP_CLOSE_TAG."$template";

    if(!@
$fp fopen($objfile'w')) {
        exit(
"Directory './forumdata/templates/' not found or have no access!");
    }

    
flock($fp3);
    
fwrite($fp$template);
    
fclose($fp);
}

function 
addquote($var) {
    return 
str_replace("//"", """preg_replace("/[([a-zA-Z0-9_x7f-xff][a-zA-Z0-9_x7f-xff]*)]/s""['/1']"$var));
}

function 
languagevar($var) {
    if(isset(
$GLOBALS['language'][$var])) {
        return 
$GLOBALS['language'][$var];
    } else {
        return 
"!$var!";
    }
}

function 
stripvtags($expr$statement) {
    
$expr str_replace("//"", """preg_replace("/<?=(/$[a-zA-Z_x7f-xff][a-zA-Z0-9_[]/"'$x7f-xff]*)?>/s""/1"$expr));
    
$statement str_replace("//"", """$statement);
    return 
$expr.$statement;
}

?>

PHP-关于模板的原理和解析

将PHP代码和静态HTML代码进行分离,使代码的可读性和维护性得到显著提高。 使用模板引擎:     我们所说的模板是Web模板,是主要由HTML标记组成的语言来编写的页面,但也有如何表示...
  • qq_23488347
  • qq_23488347
  • 2016年04月11日 12:00
  • 2095

PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结

1、推荐的一种方法:php判断搜索引擎蜘蛛爬虫还是人为访问代码,摘自Discuz x3.2 ...
  • lih062624
  • lih062624
  • 2017年04月14日 11:50
  • 2811

java项目——提升网站性能之java模板引擎beetl

在做项目的时候,jsp页面加载大量的数据后打开网页的速度明显会慢下来,为了提升网页的访问的速度,我们公司引入了beetl模板,用html页代替jsp页面。     下面首先介绍一下beetl模板。 ...
  • zhangzijiejiayou
  • zhangzijiejiayou
  • 2016年03月31日 21:46
  • 3983

从PHP的模板引擎看Discuz!模板机制

http://blog.csdn.net/zmouki/article/details/4307041 一、关于模板引擎的前言  从phplib到smarty,再到Discuz!的模板机制...
  • hhao123456
  • hhao123456
  • 2014年03月15日 12:03
  • 511

DISCUZ!X1模板home空间模板修改说明home.php

| -- template -- default  -- home 空间模板| -- template -- default  -- home  --  invite.htm  空间邀请页面| -- ...
  • lumengabc
  • lumengabc
  • 2013年12月09日 10:45
  • 951

(第30讲) PHP模板引擎Smarty缓存应用

  • 2011年11月14日 16:15
  • 25.6MB
  • 下载

php之Smarty模板引擎

  • 2017年07月08日 19:10
  • 3.56MB
  • 下载

PHP的常用的几大模板引擎

  • 2009年02月08日 09:21
  • 2KB
  • 下载

PHP模板引擎Smarty的安装配置及应用实现.pdf

  • 2008年12月03日 20:37
  • 133KB
  • 下载

php模板引擎设计原理

  • 2016年07月01日 23:13
  • 968KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP模板解析引擎--discuz
举报原因:
原因补充:

(最多只允许输入30个字)