中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Discuz論壇怎么添加配置選項

發布時間:2021-10-12 16:26:56 來源:億速云 閱讀:221 作者:小新 欄目:移動開發

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

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

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';
}
運行后,效果如下:


Discuz論壇怎么添加配置選項
圖2 至此已經成功的為 Discuz! 論壇添加了一個選項,論壇當然還有相當的選項,其基本思路都是這樣的,可以根據具體情況來進行添加。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嫩江县| 潞西市| 邢台县| 清水河县| 钟祥市| 丰台区| 温州市| 德清县| 怀化市| 石台县| 平乐县| 西畴县| 大姚县| 西峡县| 河东区| 祥云县| 正镶白旗| SHOW| 洞头县| 永年县| 绩溪县| 兰州市| 仙桃市| 罗平县| 祁连县| 曲周县| 柘荣县| 炎陵县| 乐业县| 公安县| 合江县| 常德市| 洮南市| 洛阳市| 铜山县| 青冈县| 军事| 清水县| 桂平市| 常熟市| 临城县|