1、Discuz 模版的解析流程
Discuz 模板的模块化很强,具有相同功能的模块基本上都已经统一管理了,所有的模版文件都放置在 ./template 目录下,并且 基本上都是在 ./source/module 下面的模块处理文件中被引入
一个模版文件在引入之前,通常会通过 ./source/module 下的相应模块处理程序,模版所要显示的数据,之后才会引入他要显示的模版文件,在程序文件中是这样引入模版的。
include template('forum/formdisplay');
以论团首页为例。展示模版的显示流程
论团首页是通过
./source/module/forum_index.php中的
include template('diy:forum/discuz:'.$gid);引入
找到核心文件function_core.php,在哪里我们能看到template函数
这个函数的主要作用就是对传入的模版文件进行条件判断,并检查是够更新缓存文件,至于具体的作用
./source/class/class_template.php 这个类文件,模版文件都要被他解析,然后写入缓存中,前台显示的也就是他解析过的缓存文件。
<!--{subtemplate common/header}-->
模版引入标签
<!--subtemplate-->后面的模版围巾啊通常都是被包含在其他模版文件中的子体。这样在解析模版的时候,程序就会判断<!--{subtemplate}-->所引入的模版会被再一次解析一遍然后再和入口模版拼合,组成一个完整的模版,也就是说,如果我们添加的模版是在别的模版中被调用的话,需要 <!--{subtemplate 模版名称}-->的方式引入进来
<!--{ad/headerbanner/wpa_h}-->
这个标签的异世是广告
后台添加了的广告都是现实在这个标签被解析后的代码中,ad 代表广告标签 headerbanner 为此广告的标识符wpa_h 为插入html后次广告的样式
<!--{if $_G['uid']}--><!--{/if}-->
判断标签,如果条件成立,那么包括在这个标签中的html 代码将会被显示
<!--{loop $catlist $key $cat}-->
<!--{/loop}-->
循环标签
<!--{eval $forum=$forumlist[$forumid];}-->
以eval 开始的标签,直接将后面的代码作为php执行语句原样输出。
<!--{hook/index_header}-->
$_G['setting']['pluginhooks']['global_myitem_extra'];
hook 的名字要以模块名加‘_’开始,