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

本文详细介绍了如何理解和修改Discuz论坛的模板源代码,揭示了其工作原理。从templates文件夹的default模板到index.php、header.htm和footer.htm等关键文件的解析,讲解了如何通过理解Discuz的模板机制实现论坛风格的定制。内容涵盖了PHP代码、模板文件、SQL查询、变量处理、缓存机制和语言包等核心概念,旨在帮助读者掌握Discuz模板的修改技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

许多使用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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值