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;
}

?>

相关文章推荐

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

| -- template -- default  -- home 空间模板| -- template -- default  -- home  --  invite.htm  空间邀请页面| -- ...

Smarty PHP模板引擎 2.6.25(安装文件)

  • 2009年09月08日 09:44
  • 173KB
  • 下载

(第27讲) PHP模板引擎Smarty入门使用

  • 2011年11月14日 15:49
  • 23.41MB
  • 下载

Discuz!X模板代码解析--Header(头文件)

Discuz!X模板代码解析--Header(头文件)   header.html这个文件存储于common文件下,这个大家应该不陌生吧,我是每个DIV为小节来讲,头部的核心div我就不...
  • jaray
  • jaray
  • 2012年07月16日 23:37
  • 6406

php之Smarty模板引擎

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

smarty模板引擎--php高级最详细教程

Smarty(模板引擎) 原创 一、什么是模板引擎? Smarty是一个php模板引擎。更准确的说,它分开了逻辑程序和外在的内容,提供了一种易于管理的方法。可以描述为应用程序员和美工扮演了不同...

PHP的常用的几大模板引擎

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

php模板引擎 smarty笔记

Smarty的标签都是使用定界符括起来。 默认定界符是{ 和 }, 但定界符可以被改变。 注释: {* 这是一个注释 *} 变量: 模板变量以美元符号$开头,由字母、数组和下划线组成,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP模板解析引擎--discuz
举报原因:
原因补充:

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