2024年5月1日发(作者:)

discuz的模板制作与源代码分析

各位网友,大家好!我是德阳热线论坛管理员()欢迎大家到我站看看,许

多使用discuz的人都会自然的想到论坛的风格、样式和模板,如何修改它,如

何让它符合心中的要求,相信大家只要对discuz的模板源代码进行钻研的话,

那就肯定能够自己独立修改,并且达到自己想要的风格和样式。

但是discuz的源代码极为精简,而且无注释,采用的方法多变,对象、函

数等等都不易理解,无疑让大家对模板源代码头痛不已。

俗语说得好,授人以鱼不如授人以渔,我在这里不讲如局具体修改什么,

而是讲一讲discuz模板的工作原理和源代码的拆开。

说到模板风格,大家自然想到的就是templates文件夹下的default模板,

这里面的文件众多,它是discuz的默认模板。

在这个文件夹里的模板文件很多,最常使用到的,比如说和

两个文件,它们分别是论坛的头部和底部,在其它模板里都必须调

用这两个文件,是以大家可以看到,在论坛的所有页面里,头部和底部都是相

同的。

论坛最常见的三个页面,一个是主页,也就是通常的,还有是

主题列表页,以及帖子内容页,下面以来讲述discuz模板的原理以

及它牵扯到的文件。

首先我们打开,在这个文件的开头是discuz作者的声明。

然后就是

//定义页面

define('CURSCRIPT','index');

//包含common文件和forum函数库

require_once'./include/';

require_once DISCUZ_ROOT.'./include/';

大家可以看到这里很重要的两句,就是使用require_once函数来包含两个

文件,在里存放的是一些常用数据,而在里

存放的是有关版块的函数,把这些分离开来单独作为一个文件,是因为这些东

西会在多个文件里使用,是以为了循环利用以及代码的精简性,他们被放在一

个单独的文件里。

调用了文件以后,我们就可以直接在本页面使用其中的变

量了,下面的这几句:

//判断页面状况,包括:页面缓存、是否登录、是否开启了左右分栏等等

if($cacheindexlife&&!$discuz_uid&&$showoldetails!='yes'&&(!

$_DCACHE['settings']['frameon']||$_DCACHE['settings']['frameon']&&$_G

ET['frameon']!='yes')&&empty($gid)){…}

在这个if大括号里我们可以看到许多变量,这些变量的值从何而来,就是

从里来的,而这个大括号里分别判断页面的各种状况,并且对

其进行处理,特别要说的是$discuz_uid这个变量,它表示的是访问者的uid,

如果未登录就是0,所以大家可以使用if(!$dicuz){…}来判断用户是否登录。

后面的也是进行一些判断,我们直接到第42行,可以看到这里有了一些新

变量,他们都是时间的变量。

//第一个变量里的gmdate是返回一个格式化的时间,里面需要指定格式和

timestamp格式的时间,timestamp格式就是一连串的整形数字,代表着从格林

威治时间1970年1月1日凌晨0点到规定时间的秒数。

$currenttime=gmdate($timeformat,$timestamp+$timeoffset*3600);

//下面这个变量是把上次访问时间(timestmp格式)格式化成我们可以明白

的时间格式