许多使用discuz的人都会自然的想到论坛的风格、样式和模板,如何修改它,如何让它符合心中的要求,相信大家只要对discuz的模板源代码进行钻研的话,那就肯定能够自己独立修改,并且达到自己想要的风格和样式。
但是discuz的源代码极为精简,而且无注释,采用的方法多变,对象、函数等等都不易理解,无疑让大家对模板源代码头痛不已。
俗语说得好,授人以鱼不如授人以渔,我在这里不讲如局具体修改什么,而是讲一讲discuz模板的工作原理和源代码的拆开。
说到模板风格,大家自然想到的就是templates文件夹下的default模板,这里面的文件众多,它是discuz的默认模板。
在这个文件夹里的模板文件很多,最常使用到的,比如说header.htm和footer.htm两个文件,它们分别是论坛的头部和底部,在其它模板里都必须调用这两个文件,是以大家可以看到,在论坛的所有页面里,头部和底部都是相同的。
论坛最常见的三个页面,一个是主页,也就是通常的index.php,还有是主题列表页,以及帖子内容页,下面以index.php来讲述discuz模板的原理以及它牵扯到的文件。
首先我们打开index.php,在这个文件的开头是discuz作者的声明。
然后就是
//定义页面
define(‘CURSCRIPT’, ‘index’);
//包含common文件和forum函数库
require_once ‘./include/common.inc.php’;
require_once DISCUZ_ROOT.’./include/forum.func.php’;
大家可以看到这里很重要的两句,就是使用require_once函数来包含两个文件,在common.inc.php里存放的是一些常用数据,而 在forum.func.php里存放的是有关版块的函数,把这些分离开来单独作为一个文件,是因为这些东西会在多个文件里使用,是以为了循环利用以及代 码的精简性,他们被放在一个单独的文件里。
调用了common.inc.php文件以后,我们就可以直接在本页面使用其中的变量了,下面的这几句:
//判断页面状况,包括:页面缓存、是否登录、是否开启了左右分栏等等
if($cacheindexlife && !$discuz_uid && $showoldetails != ‘yes’ && (!$_DCACHE['settings']['frameon'] || $_DCACHE['settings']['frameon'] && $_GET['frameon'] != ‘yes’) && empty($gid)) {……}
在这个if大括号里我们可以看到许多变量, 这些变量的值从何而来,就是从common.inc.php里来的,而这个大括号里分别判断页面的各种状况,并且对其进行处理,特别要说的 是$discuz_uid这个变量,它表示的是访问者的uid,如果未登录就是0,所以大家可以使用if(!$dicuz){……}来判断用户是否登录。
后面的也是进行一些判断,我们直接到第42行,可以看到这里有了一些新变量,他们都是时间的变量。
//第一个变量里的gmdate是返回一个格式化的时间,里面需要指定格式和timestamp格式的时间,timestamp格式就是一连串的整形数字,代表着从格林威治时间1970年1月1日凌晨0点到规定时间的秒数。
$currenttime = gmdate($timeformat, $timestamp + $timeoffset * 3600);
//下面这个变量是把上次访问时间(timestmp格式)格式化成我们可以明白的时间格式
$lastvisittime = dgmdate(“$dateformat $timeformat”, $lastvisit + $timeoffset * 3600);