Discuz! 论坛如何添加配置选项

所属分类: 网页制作 / 应用技巧 阅读数: 1514
收藏 0 赞 0 分享
Discuz! 论坛在后台有很多配置选项,通过这些配置选项可以实现很多功能。在 Discuz!论坛的二次开发过程中,我们也同样要经常添加一些配置,然后根据配置来进行不同的操作。下面我就来介绍一下如何在 Discuz! 论坛中添加配置选项。
我们以 Discuz!6.0 为例。首先我们来看一下 Discuz! 论坛后台的配置界面,以管理员身份登录论坛后台,依次选择‘基本设置’ -> ‘基本设置’后会出现以下的界面:


图1
这个页面用了框架,我们在右下方的页面中点击右键选择‘属性’,在弹出的窗口中,我们发现这个页面的 URL 是 '/admincp.php?action=settings&do=basic' ,这个页面用的程序是admincp.php ,先来分析一下这个文件。
这个文件的第 172-290 行大致的内容如下:
代码如下:
$cpscript = '';
if($adminid == 1) {
if($action == 'home') {
$cpscript = 'home';
} elseif($action == 'runwizard' && isfounder()) {
$cpscript = 'runwizard';
} elseif ……
} elseif($adminid == 2 || $adminid == 3) {
if($action == 'home') {
$cpscript = 'home';
} elseif((($allowedituser || $allowbanuser) && ($action == 'editmember' || $action == 'banmember')) || ($allowbanip && $action == 'ipban')) {
$cpscript = 'members';
} elseif……
}
if($cpscript) {
} elseif……
}
if($cpscript) {
require_once DISCUZ_ROOT.'./admin/'.$cpscript.'.inc.php';
} ……
这段程序主要就是根据 $action 变量来给 $cpscript 赋值,然后根据 $cpscript 的值来引入 admin 目录下的程序文件。我们注意一下 179 行左侧的 $action 值的判断,会发现其$cpscript 的值是 'settings' ,那就是说 283 行引入的程序文件是 'admin/settings.inc.php' 。
然后打开 settings.inc.php 文件,会发现里面的内容好长呀,不要被这给吓坏了,仔细分析一下就好了。
第 14 行:
代码如下:
$operation = $operation ? $operation : (!empty($do) ? $do : '');
这里会根据 GET 过来的 $do 值来给 $operation 赋值,这个例子中其值是 'basic' 。
第 17 行:
代码如下:
$query = $db->query("SELECT * FROM {$tablepre}settings");
while($setting = $db->fetch_array($query)) {
$settings[$setting['variable']] = $setting['value'];
}
这些程序段是从数据库把数据读出来存到数组 $settings 中以便下面调用。
下面的程序结构如下:
代码如下:
if(!submitcheck('settingsubmit')) {
if($operation == 'access') {
……
} elseif($operation == 'styles') {
……
} elseif ……
} else {
//表单提交后的数据处理
……
}
程序中的 submitcheck 函数是用检查一个表单是否进行提交,如果表单没有提交,则根据前面处理过的 $operation 来显示表单。在这里 $operation 的值是 basic ,其执行的是下面一段:
代码如下:
$operation = 'basic';
showtype('settings_general', 'top');
showsetting('settings_bbname', 'settingsnew[bbname]', $settings['bbname'], 'text');
showsetting('settings_sitename', 'settingsnew[sitename]', $settings['sitename'], 'text');
showsetting('settings_siteurl', 'settingsnew[siteurl]', $settings['siteurl'], 'text');
showsetting('settings_index_name', 'settingsnew[indexname]', $settings['indexname'], 'text');
showsetting('settings_icp', 'settingsnew[icp]', $settings['icp'], 'text');
showsetting('settings_boardlicensed', 'settingsnew[boardlicensed]', $settings['boardlicensed'], 'radio');
showsetting('settings_bbclosed', 'settingsnew[bbclosed]', $settings['bbclosed'], 'radio');
showsetting('settings_closedreason', 'settingsnew[closedreason]', $settings['closedreason'], 'textarea');
在这里用到了一个自定义函数 showsetting ,它的第一个参数是这个配置选项的名字,第二个参数是在 HTML 显示时 input 的 name 值,第三个参数是当前配置选项的值,是上面从数据库查出来的数组 $settings 中的一个值,第四个参数是 input 的类型。我们添加一个自己的配置选项 mytest 。在上面代码的最后面添加如下代码:
代码如下:
showsetting('settings_mytest', 'settingsnew[mytest]', $settings['mytest'], 'radio');
保存,刷新页面发现在这个页面最下方多出一个选项:
settings_mytest 是 否
但是发现其是英文的,我们修改一下语言包就可以了。在templates/default/admincp.lang.php 文件的第 450 行 'settings_closedreason_comment' => ' 论坛关闭时出现的提示信息' ,下面添加如下代码:
代码如下:
'settings_mytest' => '测试选项:',
'settings_mytest_comment' => '测试选项的提示信息',
保存后再刷新就有中文提示了。
至此在界面上的显示已经处理完毕,下面来说一下如何处理表单提交后的数据。在/admin/settings.inc.php 文件的 if(!submitcheck('settingsubmit')) {} 对应的 else 语句部分。这部分的代码,首先对提交过来的数据进行处理,然后全部放到 $settingsnew 数组中,其实也就是 POST 过来的数据进行一下检查。在这个文件的 1140 行左右有如下代码:
代码如下:
foreach($settingsnew AS $key => $val) {
if(isset($settings[$key]) && $settings[$key] != $val) {
$$key = $val;
$updatecache = TRUE;
if(in_array($key, array('newbiespan', 'topicperpage', 'postperpage', 'memberperpage', 'hottopic',
'starthreshold', 'delayviewcount', 'visitedforums', 'maxsigrows', 'timeoffset', 'statscachelife',
'pvfrequence', 'oltimespan', 'seccodestatus', 'maxprice', 'rssttl', 'rewritestatus', 'bdaystatus',
'maxonlines', 'loadctrl', 'floodctrl', 'regctrl', 'regfloodctrl', 'searchctrl', 'extcredits1', 'extcredits2',
'extcredits3', 'extcredits4', 'extcredits5', 'extcredits6', 'extcredits7', 'extcredits8',
'transfermincredits', 'exchangemincredits', 'maxincperthread', 'maxchargespan', 'maxspm',
'maxsearchresults', 'maxsmilies', 'threadmaxpages', 'membermaxpages', 'maxpostsize',
'minpostsize', 'maxavatarsize', 'maxavatarpixel', 'maxpolloptions', 'karmaratelimit', 'losslessdel',
'edittimelimit', 'smcols', 'watermarktrans', 'watermarkquality', 'jscachelife', 'waptpp', 'wapppp',
'wapmps', 'maxmodworksmonths', 'frameon', 'maxonlinelist'))) {
$val = (float)$val;
}
$db->query("REPLACE INTO {$tablepre}settings (variable, value) VALUES ('$key', '$val')");
}
}
这段代码的作用就是检查 $settingsnew 数组中是否有对应的选项,如果有并且是数字选项时进行 float 转换,然后全部 REPLACE INTO 到数据表 settings 中, mytest 选项是我们新添加的,数据表中没有这个选项,我需要先在数据库中执行如下 SQL 语句: REPLACE INTO cdb_settings(variable, value) VALUES('mytest', '0') ,注意修改一下表前缀。这们的 mytest 选项就会存入数据库中。
在 1160 行左右会执行代码 updatecache('settings') 来把 settingsnew 数组里的数据自动进行缓存,具体实现方法有兴趣的朋友可以仔细看一下 /include/cache.func.php 文件是如何实现的。
数据进行缓存后会在 /forumdata/cache/cache_settings.php 文件中 $_DCACHE['settings'] 数组中有 mytest 项,然后我们就可以通过这个选项来做一些操作。在 /include/common.inc.php 文件的第 93 行左右有如下代码:
代码如下:
$cachelost = (@include DISCUZ_ROOT.'./forumdata/cache/cache_settings.php') ? '' : 'settings';
@extract($_DCACHE['settings']);
通过上面的代码,直接把 mytest 配置选项的值用 $mytest 变量来存放,我们就可以直接判断 $mytest 来进行操作了。在 index.php 文件的 17 行加入如下代码:
代码如下:
if($mytest) {
echo 'Hello This is Test';
}
运行后,效果如下:



图2 至此已经成功的为 Discuz! 论坛添加了一个选项,论坛当然还有相当的选项,其基本思路都是这样的,可以根据具体情况来进行添加。
更多精彩内容其他人还在看

更受欢迎 更具创造性的深底色网页设计实例

最新的调查表示,47%的受访者首选浅底色的设计, 主要原因是基于可读性。大多数人不喜欢阅读深色背景上的亮色文字,那样眼睛容易疲劳从而导致不适的阅读体验。
收藏 0 赞 0 分享

有创意的关于我们网页页面设计

本文收集了一些“关于我们”网页页面,60个漂亮的有效果的对用户非常友好的关于我们页面的设计实例。希望你能从中获得设计灵感。
收藏 0 赞 0 分享

整洁漂亮的网页设计的4项原则

我最喜欢的设计书籍之一就是《Robin Williams Design Workshop》.它深入实际的设计理论,并且包含许多极棒的设计实例。其中一个值得关注的地方就是4项主要的设计原则,它们已经在设计中为我所用。这4项原则就是:反差, 重复, 排列, 和分类。
收藏 0 赞 0 分享

设计参考 WordPress建站成功案例

最近国外有个牛人收集了 16 个专门收集 wordpress 精彩建站案例的网站,对于每一个 wordpress 迷来说,这都是一份大礼。
收藏 0 赞 0 分享

新闻风格网站设计实例25个

杂志和新闻风格设计越来越流行了。像Wordpress之类的内容管理系统对此类网站有比较多的模板选择,可以让普通的站长或博主轻松实现一个很像新闻网站的网站。在本文中,我们将推荐25个可以为你提供灵感的杂志风格网站设计。
收藏 0 赞 0 分享

网页文字设计应该像聪明女孩穿衣服

  这世上“没有丑女人,只有懒女人”这是女人美丽圣经里的最精彩的一句话了,一个女人只要舍得花时间琢磨怎么保养,怎么打扮,总能够找到方法展现自己美丽的一面的。界面设计何尝不是如此?那就让我们来看看聪明女人的穿衣之道里有没有什么做设计可以借鉴的地方
收藏 0 赞 0 分享

怎样设计网页?怎样制作网页?

  在网页设计的认识上,许多人似乎仍停留在网页制作的高度上。认为只要用好了网页制作软件,就能搞好网页设计了。   其实网页设计是一个感性思考与理性分析相结合的复杂的过程,它的方向取决于设计的任务,它的实现依赖于网页的制作。正所谓“功夫在诗外”
收藏 0 赞 0 分享

网页可读性提高的几个方法

1. 使用对比色 (Use contrasting colours). 这里说的对比是文字的颜色和背景色的对比。这样用户可以比较容易的看清文字,减少阅读疲劳。有视力障碍的人可能看不清楚低对比度的文字。可以去Vischeck这个网站可以看看你的网站在色弱(或色盲)用户眼中的样子。
收藏 0 赞 0 分享

网页设计心得:页面布局的简单规则

·重复:在整个站点中重复实现某些页面设计风格。   重复的成分可能是某种字体、标题logo、导航菜单、页面的空白边设置、贯穿页面的特定厚度的线条等。   颜色作为重复成分也很有用:为所有标题设置某种颜色,或者在标题背后使用精细的背景。 &middo
收藏 0 赞 0 分享

网页设计人员应该注意的43个Web设计错误

这是一篇关于网站易用性的文章,作者以亲身体会讲述了43条网站设计中常犯的错误,而无疑这些错误会大大影响网站的可用性。如今网站易用性已成为一种趋势,但纵观国内的各大网站,似乎易用性并未成为设计者们广泛理解的概念, 因此希望这篇文章对大家能有作用。 1. 用户必须
收藏 0 赞 0 分享
查看更多