Discuz! 论坛怎样加上配备选项

2021-01-20 22:46 jianzhan
Discuz! 论坛在后台管理有许多配备选项,根据这些配备选项能够完成许多作用。在 Discuz!论坛的2次开发设计全过程中,大家也一样要常常加上1些配备,随后依据配备来开展不一样的实际操作。下面我就来详细介绍1下怎样在 Discuz! 论坛中加上配备选项。
大家以 Discuz!6.0 为例。最先大家看来1下 Discuz! 论坛后台管理的配备页面,以管理方法员身份登陆论坛后台管理,先后挑选‘基础设定’ -> ‘基础设定’后会出現下列的页面:


图1
这个网页页面用了架构,大家在右正下方的网页页面中点一下右键挑选‘特性’,在弹出的对话框中,大家发现这个网页页面的 URL 是 '/admincp.php?action=settings&do=basic' ,这个网页页面用的程序流程是admincp.php ,先来剖析1下这个文档。
这个文档的第 172⑵90 行大概的內容以下:
编码以下:
$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 文件目录下的程序流程文档。大家留意1下 179 行左边的 $action 值的分辨,会发现其$cpscript 的值是 'settings' ,那便是说 283 行引进的程序流程文档是 'admin/settings.inc.php' 。
随后开启 settings.inc.php 文档,会发现里边的內容好长呀,不必被这给吓坏了,细心剖析1下就行了。
第 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 涵数是用查验1个表单是不是开展递交,假如表单沒有递交,则依据前面解决过的 $operation 来显示信息表单。在这里 $operation 的值是 basic ,其实行的是下面1段:
编码以下:
$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');
在这里用到了1个自定涵数 showsetting ,它的第1个主要参数是这个配备选项的姓名,第2个主要参数是在 HTML 显示信息时 input 的 name 值,第3个主要参数是当今配备选项的值,是上面从数据信息库查出来的数字能量数组 $settings 中的1个值,第4个主要参数是 input 的种类。大家加上1个自身的配备选项 mytest 。在上面编码的最终面加上以下编码:
编码以下:
showsetting('settings_mytest', 'settingsnew[mytest]', $settings['mytest'], 'radio');
储存,更新网页页面发如今这个网页页面最正下方多出1个选项:
settings_mytest 是 否
可是发现其是英文的,大家改动1下語言包便可以了。在templates/default/admincp.lang.php 文档的第 450 行 'settings_closedreason_comment' => ' 论坛关掉时出現的提醒信息内容' ,下面加上以下编码:
编码以下:
'settings_mytest' => '检测选项:',
'settings_mytest_comment' => '检测选项的提醒信息内容',
储存后再更新就有汉语提醒了。
至此在页面上的显示信息早已解决结束,下面来讲1下怎样解决表单递交后的数据信息。在/admin/settings.inc.php 文档的 if(!submitcheck('settingsubmit')) {} 对应的 else 句子一部分。这一部分的编码,最先对递交过来的数据信息开展解决,随后所有放到 $settingsnew 数字能量数组中,实际上也便是 POST 过来的数据信息开展1下查验。在这个文档的 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') ,留意改动1下表前缀。这们的 mytest 选项就会存入数据信息库中。
在 1160 行上下会实行编码 updatecache('settings') 来把 settingsnew 数字能量数组里的数据信息全自动开展缓存文件,实际完成方式有兴趣爱好的盆友能够细心看1下 /include/cache.func.php 文档是怎样完成的。
数据信息开展缓存文件后会在 /forumdata/cache/cache_settings.php 文档中 $_DCACHE['settings'] 数字能量数组中有 mytest 项,随后大家便可以根据这个选项来做1些实际操作。在 /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! 论坛加上了1个选项,论坛自然也有非常的选项,其基础思路全是这样的,能够依据实际状况来开展加上。