Discuz! 论坛如何添加配置选项
网站建设 2023-01-28 20:48www.1681989.com免费网站
Discuz! 论坛在后台有很多配置选项,通过这些配置选项可以实现很多功能。在 Discuz!论坛的二次开发过程中,我们也同样要经常添加一些配置,然后根据配置来进行不同的操作。狼蚁网站SEO优化我就来介绍一下如何在 Discuz! 论坛中添加配置选项。
我们以 Discuz!6.0 为例。我们来看一下 Discuz! 论坛后台的配置界面,以管理员身份登录论坛后台,依次选择‘基本设置’ -> ‘基本设置’后会出现以下的界面
图1
这个页面用了框架,我们在右下方的页面中点击右键选择‘属性’,在弹出的窗口中,我们发现这个页面的 URL 是 '/admcp.php?action=settgs&do=basic' ,这个页面用的程序是admcp.php ,先来分析一下这个文件。
这个文件的第 172-290 行大致的内容如下
代码如下
$cpscript = '';
if($admid == 1) {
if($action == 'home') {
$cpscript = 'home';
} elseif($action == 'runwizard' && isfounder()) {
$cpscript = 'runwizard';
} elseif ……
} elseif($admid == 2 || $admid == 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.'./adm/'.$cpscript.'.c.php';
} ……
这段程序主要就是根据 $action 变量来给 $cpscript 赋值,然后根据 $cpscript 的值来引入 adm 目录下的程序文件。我们注意一下 179 行左侧的 $action 值的判断,会发现其$cpscript 的值是 'settgs' ,那就是说 283 行引入的程序文件是 'adm/settgs.c.php' 。
然后打开 settgs.c.php 文件,会发现里面的内容好长呀,不要被这给吓坏了,仔细分析一下就好了。
第 14 行
代码如下
$operation = $operation ? $operation : (!empty($do) ? $do : '');
这里会根据 GET 过来的 $do 值来给 $operation 赋值,这个例子中其值是 'basic' 。
第 17 行
代码如下
$query = $db->query("SELECT FROM {$tablepre}settgs");
while($settg = $db->fetch_array($query)) {
$settgs[$settg['variable']] = $settg['value'];
}
这些程序段是从数据库把数据读出来存到数组 $settgs 中以便狼蚁网站SEO优化调用。
狼蚁网站SEO优化的程序结构如下
代码如下
if(!submitcheck('settgsubmit')) {
if($operation == 'aess') {
……
} elseif($operation == 'styles') {
……
} elseif ……
} else {
//表单提交后的数据处理
……
}
程序中的 submitcheck 函数是用检查一个表单是否进行提交,如果表单没有提交,则根据前面处理过的 $operation 来显示表单。在这里 $operation 的值是 basic ,其执行的是狼蚁网站SEO优化一段
代码如下
$operation = 'basic';
showtype('settgs_general', '');
showsettg('settgs_bbname', 'settgsnew[bbname]', $settgs['bbname'], 'text');
showsettg('settgs_sitename', 'settgsnew[sitename]', $settgs['sitename'], 'text');
showsettg('settgs_siteurl', 'settgsnew[siteurl]', $settgs['siteurl'], 'text');
showsettg('settgs_dex_name', 'settgsnew[dexname]', $settgs['dexname'], 'text');
showsettg('settgs_icp', 'settgsnew[icp]', $settgs['icp'], 'text');
showsettg('settgs_boardlicensed', 'settgsnew[boardlicensed]', $settgs['boardlicensed'], 'radio');
showsettg('settgs_bbclosed', 'settgsnew[bbclosed]', $settgs['bbclosed'], 'radio');
showsettg('settgs_closedreason', 'settgsnew[closedreason]', $settgs['closedreason'], 'textarea');
在这里用到了一个自定义函数 showsettg ,它的第一个参数是这个配置选项的名字,第二个参数是在 HTML 显示时 put 的 name 值,第三个参数是当前配置选项的值,是上面从数据库查出来的数组 $settgs 中的一个值,第四个参数是 put 的类型。我们添加一个自己的配置选项 mytest 。在上面代码的面添加如下代码
代码如下
showsettg('settgs_mytest', 'settgsnew[mytest]', $settgs['mytest'], 'radio');
保存,刷新页面发现在这个页面最下方多出一个选项
settgs_mytest 是 否
发现其是英文的,我们修改一下语言包就可以了。在templates/default/admcp.lang.php 文件的第 450 行 'settgs_closedreason_ment' => ' 论坛关闭时出现的提示信息' ,狼蚁网站SEO优化添加如下代码
代码如下
'settgs_mytest' => '测试选项:',
'settgs_mytest_ment' => '测试选项的提示信息',
保存后再刷新就有中文提示了。
至此在界面上的显示已经处理完毕,狼蚁网站SEO优化来说一下如何处理表单提交后的数据。在/adm/settgs.c.php 文件的 if(!submitcheck('settgsubmit')) {} 对应的 else 语句部分。这部分的代码,对提交过来的数据进行处理,然后全部放到 $settgsnew 数组中,其实也就是 POST 过来的数据进行一下检查。在这个文件的 1140 行左右有如下代码
代码如下
foreach($settgsnew AS $key => $val) {
if(isset($settgs[$key]) && $settgs[$key] != $val) {
$$key = $val;
$updatecache = TRUE;
if(_array($key, array('newbiespan', 'icperpage', 'postperpage', 'memberperpage', 'hotic',
'starthreshold', 'delayviewcount', 'visitedforums', 'maxsigrows', 'timeoffset', 'statscachelife',
'pvfrequence', 'oltimespan', 'seodestatus', 'maxprice', 'rssttl', 'rewritestatus', 'bdaystatus',
'maxonles', 'loadctrl', 'floodctrl', 'regctrl', 'regfloodctrl', 'searchctrl', 'extcredits1', 'extcredits2',
'extcredits3', 'extcredits4', 'extcredits5', 'extcredits6', 'extcredits7', 'extcredits8',
'transfermcredits', 'exchangemcredits', 'maxcperthread', 'maxchargespan', 'maxspm',
'maxsearchresults', 'maxsmilies', 'threadmaxpages', 'membermaxpages', 'maxpostsize',
'mpostsize', 'maxavatarsize', 'maxavatarpixel', 'maxpolloptions', 'karmaratelimit', 'losslessdel',
'edittimelimit', 'smcols', 'watermarktrans', 'watermarkquality', 'jscachelife', 'waptpp', 'wapppp',
'wapmps', 'maxmodworksmonths', 'frameon', 'maxonlelist'))) {
$val = (float)$val;
}
$db->query("REPLACE INTO {$tablepre}settgs (variable, value) VALUES ('$key', '$val')");
}
}
这段代码的作用就是检查 $settgsnew 数组中是否有对应的选项,如果有并且是数字选项时进行 float 转换,然后全部 REPLACE INTO 到数据表 settgs 中, mytest 选项是我们新添加的,数据表中没有这个选项,我需要先在数据库中执行如下 SQL 语句 REPLACE INTO cdb_settgs(variable, value) VALUES('mytest', '0') ,注意修改一下表前缀。这们的 mytest 选项就会存入数据库中。
在 1160 行左右会执行代码 updatecache('settgs') 来把 settgsnew 数组里的数据自动进行缓存,具体实现方法有兴趣的朋友可以仔细看一下 /clude/cache.func.php 文件是如何实现的。
数据进行缓存后会在 /forumdata/cache/cache_settgs.php 文件中 $_DCACHE['settgs'] 数组中有 mytest 项,然后我们就可以通过这个选项来做一些操作。在 /clude/mon.c.php 文件的第 93 行左右有如下代码
代码如下
$cachelost = (@clude DISCUZ_ROOT.'./forumdata/cache/cache_settgs.php') ? '' : 'settgs';
@extract($_DCACHE['settgs']);
通过上面的代码,直接把 mytest 配置选项的值用 $mytest 变量来存放,我们就可以直接判断 $mytest 来进行操作了。在 dex.php 文件的 17 行加入如下代码
代码如下
if($mytest) {
echo 'Hello This is Test';
}
运行后,效果如下
图2 至此已经成功的为 Discuz! 论坛添加了一个选项,论坛还有相当的选项,其基本思路都是这样的,可以根据具体情况来进行添加。
我们以 Discuz!6.0 为例。我们来看一下 Discuz! 论坛后台的配置界面,以管理员身份登录论坛后台,依次选择‘基本设置’ -> ‘基本设置’后会出现以下的界面
图1
这个页面用了框架,我们在右下方的页面中点击右键选择‘属性’,在弹出的窗口中,我们发现这个页面的 URL 是 '/admcp.php?action=settgs&do=basic' ,这个页面用的程序是admcp.php ,先来分析一下这个文件。
这个文件的第 172-290 行大致的内容如下
代码如下
$cpscript = '';
if($admid == 1) {
if($action == 'home') {
$cpscript = 'home';
} elseif($action == 'runwizard' && isfounder()) {
$cpscript = 'runwizard';
} elseif ……
} elseif($admid == 2 || $admid == 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.'./adm/'.$cpscript.'.c.php';
} ……
这段程序主要就是根据 $action 变量来给 $cpscript 赋值,然后根据 $cpscript 的值来引入 adm 目录下的程序文件。我们注意一下 179 行左侧的 $action 值的判断,会发现其$cpscript 的值是 'settgs' ,那就是说 283 行引入的程序文件是 'adm/settgs.c.php' 。
然后打开 settgs.c.php 文件,会发现里面的内容好长呀,不要被这给吓坏了,仔细分析一下就好了。
第 14 行
代码如下
$operation = $operation ? $operation : (!empty($do) ? $do : '');
这里会根据 GET 过来的 $do 值来给 $operation 赋值,这个例子中其值是 'basic' 。
第 17 行
代码如下
$query = $db->query("SELECT FROM {$tablepre}settgs");
while($settg = $db->fetch_array($query)) {
$settgs[$settg['variable']] = $settg['value'];
}
这些程序段是从数据库把数据读出来存到数组 $settgs 中以便狼蚁网站SEO优化调用。
狼蚁网站SEO优化的程序结构如下
代码如下
if(!submitcheck('settgsubmit')) {
if($operation == 'aess') {
……
} elseif($operation == 'styles') {
……
} elseif ……
} else {
//表单提交后的数据处理
……
}
程序中的 submitcheck 函数是用检查一个表单是否进行提交,如果表单没有提交,则根据前面处理过的 $operation 来显示表单。在这里 $operation 的值是 basic ,其执行的是狼蚁网站SEO优化一段
代码如下
$operation = 'basic';
showtype('settgs_general', '');
showsettg('settgs_bbname', 'settgsnew[bbname]', $settgs['bbname'], 'text');
showsettg('settgs_sitename', 'settgsnew[sitename]', $settgs['sitename'], 'text');
showsettg('settgs_siteurl', 'settgsnew[siteurl]', $settgs['siteurl'], 'text');
showsettg('settgs_dex_name', 'settgsnew[dexname]', $settgs['dexname'], 'text');
showsettg('settgs_icp', 'settgsnew[icp]', $settgs['icp'], 'text');
showsettg('settgs_boardlicensed', 'settgsnew[boardlicensed]', $settgs['boardlicensed'], 'radio');
showsettg('settgs_bbclosed', 'settgsnew[bbclosed]', $settgs['bbclosed'], 'radio');
showsettg('settgs_closedreason', 'settgsnew[closedreason]', $settgs['closedreason'], 'textarea');
在这里用到了一个自定义函数 showsettg ,它的第一个参数是这个配置选项的名字,第二个参数是在 HTML 显示时 put 的 name 值,第三个参数是当前配置选项的值,是上面从数据库查出来的数组 $settgs 中的一个值,第四个参数是 put 的类型。我们添加一个自己的配置选项 mytest 。在上面代码的面添加如下代码
代码如下
showsettg('settgs_mytest', 'settgsnew[mytest]', $settgs['mytest'], 'radio');
保存,刷新页面发现在这个页面最下方多出一个选项
settgs_mytest 是 否
发现其是英文的,我们修改一下语言包就可以了。在templates/default/admcp.lang.php 文件的第 450 行 'settgs_closedreason_ment' => ' 论坛关闭时出现的提示信息' ,狼蚁网站SEO优化添加如下代码
代码如下
'settgs_mytest' => '测试选项:',
'settgs_mytest_ment' => '测试选项的提示信息',
保存后再刷新就有中文提示了。
至此在界面上的显示已经处理完毕,狼蚁网站SEO优化来说一下如何处理表单提交后的数据。在/adm/settgs.c.php 文件的 if(!submitcheck('settgsubmit')) {} 对应的 else 语句部分。这部分的代码,对提交过来的数据进行处理,然后全部放到 $settgsnew 数组中,其实也就是 POST 过来的数据进行一下检查。在这个文件的 1140 行左右有如下代码
代码如下
foreach($settgsnew AS $key => $val) {
if(isset($settgs[$key]) && $settgs[$key] != $val) {
$$key = $val;
$updatecache = TRUE;
if(_array($key, array('newbiespan', 'icperpage', 'postperpage', 'memberperpage', 'hotic',
'starthreshold', 'delayviewcount', 'visitedforums', 'maxsigrows', 'timeoffset', 'statscachelife',
'pvfrequence', 'oltimespan', 'seodestatus', 'maxprice', 'rssttl', 'rewritestatus', 'bdaystatus',
'maxonles', 'loadctrl', 'floodctrl', 'regctrl', 'regfloodctrl', 'searchctrl', 'extcredits1', 'extcredits2',
'extcredits3', 'extcredits4', 'extcredits5', 'extcredits6', 'extcredits7', 'extcredits8',
'transfermcredits', 'exchangemcredits', 'maxcperthread', 'maxchargespan', 'maxspm',
'maxsearchresults', 'maxsmilies', 'threadmaxpages', 'membermaxpages', 'maxpostsize',
'mpostsize', 'maxavatarsize', 'maxavatarpixel', 'maxpolloptions', 'karmaratelimit', 'losslessdel',
'edittimelimit', 'smcols', 'watermarktrans', 'watermarkquality', 'jscachelife', 'waptpp', 'wapppp',
'wapmps', 'maxmodworksmonths', 'frameon', 'maxonlelist'))) {
$val = (float)$val;
}
$db->query("REPLACE INTO {$tablepre}settgs (variable, value) VALUES ('$key', '$val')");
}
}
这段代码的作用就是检查 $settgsnew 数组中是否有对应的选项,如果有并且是数字选项时进行 float 转换,然后全部 REPLACE INTO 到数据表 settgs 中, mytest 选项是我们新添加的,数据表中没有这个选项,我需要先在数据库中执行如下 SQL 语句 REPLACE INTO cdb_settgs(variable, value) VALUES('mytest', '0') ,注意修改一下表前缀。这们的 mytest 选项就会存入数据库中。
在 1160 行左右会执行代码 updatecache('settgs') 来把 settgsnew 数组里的数据自动进行缓存,具体实现方法有兴趣的朋友可以仔细看一下 /clude/cache.func.php 文件是如何实现的。
数据进行缓存后会在 /forumdata/cache/cache_settgs.php 文件中 $_DCACHE['settgs'] 数组中有 mytest 项,然后我们就可以通过这个选项来做一些操作。在 /clude/mon.c.php 文件的第 93 行左右有如下代码
代码如下
$cachelost = (@clude DISCUZ_ROOT.'./forumdata/cache/cache_settgs.php') ? '' : 'settgs';
@extract($_DCACHE['settgs']);
通过上面的代码,直接把 mytest 配置选项的值用 $mytest 变量来存放,我们就可以直接判断 $mytest 来进行操作了。在 dex.php 文件的 17 行加入如下代码
代码如下
if($mytest) {
echo 'Hello This is Test';
}
运行后,效果如下
图2 至此已经成功的为 Discuz! 论坛添加了一个选项,论坛还有相当的选项,其基本思路都是这样的,可以根据具体情况来进行添加。
网站设计
- 静宁会SEO的网站建设公司:全面提升您的网络影
- 提升在线业务的关键:选择最佳的丽水网站建设
- 浙江网站优化发展潜力如何
- 井研专业的网站建设公司:打造您的在线品牌
- 灵山SEO网站建设公司:提升您的在线业务表现
- 蒙城网站建设优化公司:提升您网站表现的理想
- 阳谷企业网站优化:提升线上业务力的关键
- 樟树专业的网站建设公司:打造您在线业务的坚
- 通河百度SEO排名的策略与技巧
- 重庆百度快照排名如何进行精准的客户引流
- 重庆百度快照排名
- 常宁便宜的建站公司:助您轻松打造在线业务
- 巫溪百度网站优化:提升网站曝光率与流量的关
- 湖北整站优化怎么做才能放大客户需求
- 闸北网站建设多少钱?全面解析与预算规划
- 辽宁企业网站优化怎么做电话营销