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

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

創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站設(shè)計(jì)、做網(wǎng)站與策劃設(shè)計(jì),平壩網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:平壩等地區(qū)。平壩做網(wǎng)站價格咨詢:18982081108

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

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


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

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

分享名稱:Discuz論壇怎么添加配置選項(xiàng)
URL地址:http://muchs.cn/article28/ipijcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、電子商務(wù)、網(wǎng)站改版網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名