溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Discuz論壇怎么添加配置選項(xiàng)

發(fā)布時(shí)間:2021-10-12 16:26:56 來(lái)源:億速云 閱讀:217 作者:小新 欄目:移動(dòng)開(kāi)發(fā)

這篇文章主要介紹Discuz論壇怎么添加配置選項(xiàng),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

Discuz! 論壇在后臺(tái)有很多配置選項(xiàng),通過(guò)這些配置選項(xiàng)可以實(shí)現(xiàn)很多功能。在 Discuz!論壇的二次開(kāi)發(fā)過(guò)程中,我們也同樣要經(jīng)常添加一些配置,然后根據(jù)配置來(lái)進(jìn)行不同的操作。下面我就來(lái)介紹一下如何在 Discuz! 論壇中添加配置選項(xiàng)。
我們以 Discuz!6.0 為例。首先我們來(lái)看一下 Discuz! 論壇后臺(tái)的配置界面,以管理員身份登錄論壇后臺(tái),依次選擇‘基本設(shè)置’ -> ‘基本設(shè)置’后會(huì)出現(xiàn)以下的界面:

Discuz論壇怎么添加配置選項(xiàng)
圖1
這個(gè)頁(yè)面用了框架,我們?cè)谟蚁路降捻?yè)面中點(diǎn)擊右鍵選擇‘屬性’,在彈出的窗口中,我們發(fā)現(xiàn)這個(gè)頁(yè)面的 URL 是 '/admincp.php?action=settings&do=basic' ,這個(gè)頁(yè)面用的程序是admincp.php ,先來(lái)分析一下這個(gè)文件。
這個(gè)文件的第 172-290 行大致的內(nèi)容如下:
代碼如下:
$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';
 } ……
這段程序主要就是根據(jù) $action 變量來(lái)給 $cpscript 賦值,然后根據(jù) $cpscript 的值來(lái)引入 admin 目錄下的程序文件。我們注意一下 179 行左側(cè)的 $action 值的判斷,會(huì)發(fā)現(xiàn)其$cpscript 的值是 'settings' ,那就是說(shuō) 283 行引入的程序文件是 'admin/settings.inc.php' 。
然后打開(kāi) settings.inc.php 文件,會(huì)發(fā)現(xiàn)里面的內(nèi)容好長(zhǎng)呀,不要被這給嚇壞了,仔細(xì)分析一下就好了。
第 14 行:
代碼如下:
$operation = $operation ? $operation : (!empty($do) ? $do : '');
這里會(huì)根據(jù) GET 過(guò)來(lái)的 $do 值來(lái)給 $operation 賦值,這個(gè)例子中其值是 'basic' 。
第 17 行:
代碼如下:
$query = $db->query("SELECT * FROM {$tablepre}settings");
while($setting = $db->fetch_array($query)) {
 $settings[$setting['variable']] = $setting['value'];
}
這些程序段是從數(shù)據(jù)庫(kù)把數(shù)據(jù)讀出來(lái)存到數(shù)組 $settings 中以便下面調(diào)用。
下面的程序結(jié)構(gòu)如下:
代碼如下:
if(!submitcheck('settingsubmit')) {
 if($operation == 'access') {
 ……
} elseif($operation == 'styles') {
 ……
} elseif ……
} else {
 //表單提交后的數(shù)據(jù)處理
 ……
}
程序中的 submitcheck 函數(shù)是用檢查一個(gè)表單是否進(jìn)行提交,如果表單沒(méi)有提交,則根據(jù)前面處理過(guò)的 $operation 來(lái)顯示表單。在這里 $operation 的值是 basic ,其執(zhí)行的是下面一段:
代碼如下:
$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');
在這里用到了一個(gè)自定義函數(shù) showsetting ,它的第一個(gè)參數(shù)是這個(gè)配置選項(xiàng)的名字,第二個(gè)參數(shù)是在 HTML 顯示時(shí) input 的 name 值,第三個(gè)參數(shù)是當(dāng)前配置選項(xiàng)的值,是上面從數(shù)據(jù)庫(kù)查出來(lái)的數(shù)組 $settings 中的一個(gè)值,第四個(gè)參數(shù)是 input 的類(lèi)型。我們添加一個(gè)自己的配置選項(xiàng) mytest 。在上面代碼的最后面添加如下代碼:
代碼如下:
showsetting('settings_mytest', 'settingsnew[mytest]', $settings['mytest'], 'radio');
保存,刷新頁(yè)面發(fā)現(xiàn)在這個(gè)頁(yè)面最下方多出一個(gè)選項(xiàng):
settings_mytest  是  否
但是發(fā)現(xiàn)其是英文的,我們修改一下語(yǔ)言包就可以了。在templates/default/admincp.lang.php 文件的第 450 行 'settings_closedreason_comment' => ' 論壇關(guān)閉時(shí)出現(xiàn)的提示信息' ,下面添加如下代碼:
代碼如下:
'settings_mytest' => '測(cè)試選項(xiàng):',
'settings_mytest_comment' => '測(cè)試選項(xiàng)的提示信息',
保存后再刷新就有中文提示了。
至此在界面上的顯示已經(jīng)處理完畢,下面來(lái)說(shuō)一下如何處理表單提交后的數(shù)據(jù)。在/admin/settings.inc.php 文件的 if(!submitcheck('settingsubmit')) {} 對(duì)應(yīng)的 else 語(yǔ)句部分。這部分的代碼,首先對(duì)提交過(guò)來(lái)的數(shù)據(jù)進(jìn)行處理,然后全部放到 $settingsnew 數(shù)組中,其實(shí)也就是 POST 過(guò)來(lái)的數(shù)據(jù)進(jìn)行一下檢查。在這個(gè)文件的 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 數(shù)組中是否有對(duì)應(yīng)的選項(xiàng),如果有并且是數(shù)字選項(xiàng)時(shí)進(jìn)行 float 轉(zhuǎn)換,然后全部 REPLACE INTO 到數(shù)據(jù)表 settings 中, mytest 選項(xiàng)是我們新添加的,數(shù)據(jù)表中沒(méi)有這個(gè)選項(xiàng),我需要先在數(shù)據(jù)庫(kù)中執(zhí)行如下 SQL 語(yǔ)句: REPLACE INTO cdb_settings(variable, value) VALUES('mytest', '0') ,注意修改一下表前綴。這們的 mytest 選項(xiàng)就會(huì)存入數(shù)據(jù)庫(kù)中。
在 1160 行左右會(huì)執(zhí)行代碼 updatecache('settings') 來(lái)把 settingsnew 數(shù)組里的數(shù)據(jù)自動(dòng)進(jìn)行緩存,具體實(shí)現(xiàn)方法有興趣的朋友可以仔細(xì)看一下 /include/cache.func.php 文件是如何實(shí)現(xiàn)的。
數(shù)據(jù)進(jìn)行緩存后會(huì)在 /forumdata/cache/cache_settings.php 文件中 $_DCACHE['settings'] 數(shù)組中有 mytest 項(xiàng),然后我們就可以通過(guò)這個(gè)選項(xiàng)來(lái)做一些操作。在 /include/common.inc.php 文件的第 93 行左右有如下代碼:
代碼如下:
$cachelost = (@include DISCUZ_ROOT.'./forumdata/cache/cache_settings.php') ? '' : 'settings';
@extract($_DCACHE['settings']);
通過(guò)上面的代碼,直接把 mytest 配置選項(xiàng)的值用 $mytest 變量來(lái)存放,我們就可以直接判斷 $mytest 來(lái)進(jìn)行操作了。在 index.php 文件的 17 行加入如下代碼:
代碼如下:
if($mytest) {
 echo 'Hello This is Test';
}
運(yùn)行后,效果如下:


Discuz論壇怎么添加配置選項(xiàng)
圖2 至此已經(jīng)成功的為 Discuz! 論壇添加了一個(gè)選項(xiàng),論壇當(dāng)然還有相當(dāng)?shù)倪x項(xiàng),其基本思路都是這樣的,可以根據(jù)具體情況來(lái)進(jìn)行添加。

以上是“Discuz論壇怎么添加配置選項(xiàng)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI