後台頁面開發

  • 創建項目

在 ./source/admincp/menu/ 目錄下創建 menu_mynav.php 文件 在 「管理中心-全局」 中加一個項目,需要在 menu_mynav.php 中給 $menu['global'] 數組變量,為其添加一個鍵值。如:

$menu['global'][] = array('menu_mynav_mytest', 'mynav_mytest');

創建一個語言包文件 ./source/language/lang_admincp_mynav.php 您可以在此語言包文件中添加一箇中文鍵值來創建邊欄按鈕

$extend_lang = array
(
	'menu_mynav_mytest' => '我的項目',
);
$GLOBALS['admincp_actions_normal'][] = 'mynav';

其中 mynav_mytest 為指向的後台鏈接所對應的 action 和 operation, 如:admin.php?action=mynav&operation=mytest

  • 創建後台頁面

當創建好上面項目之後,就可以根據 action 和 operation 來創建後台頁面 對應鏈接 action 在
./source/admincp/ 中創建 admincp_mynav.php
全新的後台 PHP 頁面,並在內部加入下面的代碼確保其後台正常的訪問安全:

<?php
if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
	exit('Access Denied');
}

在此頁面中以正常的 PHP 邏輯進行編寫即可,注意鏈接中的 &operation=mytest 可以使用下面的 php 進行判斷:

if($operation == 'mytest') {
	//...
}

常用後台函數

當您在編寫後台時,需要對幾個常用後台顯示函數進行詳細的瞭解。下面的函數講解按照重要性、常用性進行排序

showsetting() 表單顯示

  • 返回值:無
  • 參數:
    1. $setname - 指定輸出標題,如:setting_basic_bbname,
      自動匹配描述文字為:setting_basic_bbname_comment,comment 形式文字可以在./source/language
      /lang_admincp.php 語言包中添加
    2. $varname - 指定表單的 name 值,如 settingnew[bbname]
    3. $value - 指定表單默認值變量
    4. $type - 表單樣式
      1. radio 單選
      2. text 文本、 password 密碼、 number 數字
      3. file 上傳文件
      4. filetext 上傳文件或在線文件切換型表單
      5. textarea 多行文本
      6. select 選擇框
      7. mradio 高級單選模式
      8. mcheckbox 高級多選模式
      9. binmcheckbox 二進制數值多選模式
      10. mselect 高級選擇框模式
      11. color 顏色選擇
      12. calendar 日期選擇
      13. multiply 多表單型,daterange 時間範圍
      14. 其他未在上述樣式中出現的 $type 均獨立輸出
    5. $disabled - 是否不可修改
    6. $hidden - 是否隱藏
    7. $comment - 強制描述文字
    8. $extra - 表單擴展屬性
    9. $setid - 用於拼接表單外層 Div 的 id
  • 使用方法舉例:
    //以文本形式輸出表單 (站點名稱 text):
    showsetting('setting_basic_bbname', 'settingnew[bbname]', $setting['bbname'], 'text');
    //以單選形式輸出表單 (顯示授權信息鏈接 radio):
    showsetting('setting_basic_boardlicensed', 'settingnew[boardlicensed]', $setting['boardlicensed'], 'radio');
    //以多行文本形式輸出表單 (網站第三方統計代碼 textarea):
    showsetting('setting_basic_stat', 'settingnew[statcode]', $setting['statcode'], 'textarea');
    //以高級單選形式輸出表單 (新用户註冊驗證 mradio)
    showsetting('setting_access_register_verify', array('settingnew[regverify]', array(
    	array(0, $lang['none'], array('regverifyext' => 'none')),
    	array(1, $lang['setting_access_register_verify_email'], array('regverifyext' => '')),
    	array(2, $lang['setting_access_register_verify_manual'], array('regverifyext' => ''))
    )), $setting['regverify'], 'mradio');
    //以高級多選形式輸出表單 ('允許新用户註冊 mcheckbox)
    showsetting('setting_access_register_status', array('settingnew[regstatus]', array(
    	array('open', $lang['setting_access_register_open']),
    	array('invite', $lang['setting_access_register_invite'], 'showinvite'),
    	$_G['setting']['connect']['allow'] ? array('connect', $lang['setting_access_register_connect'], 'showconnect') : array(),
    )), $regstatus, 'mcheckbox');
    
    

cpmsg() 提示消息

  • 返回值:無
  • 參數:
  1. $message - lang_admincp_msg.php 語言包中需要輸出的 key
  2. $url - 提示信息後跳轉的頁面,留空則返回上一頁
  3. $type - 特殊提示信息時指定頁面的提示樣式,可選參數:succeed 、 error 、 download 、 loadingform
  4. $values - 為語言包中的變量關鍵詞指定值,以數組形式輸入
  5. $extra - 消息文字擴展
  6. $halt - 是否輸出 「Discuz! 提示」 標題
  • 使用方法舉例:
  • 成功提示信息
cpmsg('tasks_installed', 'action=tasks&operation=type', 'succeed');
  • 錯誤提示信息,並傳遞變量 (cachethreaddir 為要傳遞如語言包中的變量關鍵詞)
cpmsg('cachethread_dir_noexists', '', 'error', array('cachethreaddir' => $settingnew['cachethreaddir']));

showformheader() 創建表單頭

  • 返回值:無
  • 參數:
  1. $action - 表單 action 的一部分,程序會自動添加 admincp.php?action= 這些內容
  2. $extra - 表單附加屬性,可以是樣式等
  3. $name - 表單的 name 和 id
  4. $method - 表單提交方式
  • 使用方法舉例,合併版塊表單:
showformheader('forums&operation=merge');

showformfooter() 創建表單尾

  • 無返回值、無參數
  • 用於接上 showformheader() 函數進行收尾工作

showtableheader() 創建表格頭

  • 返回值:無
  • 參數:
  1. $title - 如果輸入 title 則顯示標題,class 為 header,否則僅顯示一個 table 頭
  2. $classname - 定義此輸出表格的 CSS 樣式
  3. $extra - 表格擴展屬性
  4. $titlespan - 表格列數
  • 使用方法實例:
showtableheader('forums_edit_posts', 'nobottom');

showtablefooter() 創建表格尾

用於接上 showformheader() 函數進行收尾工作

showtablerow() 創建列表式頁面的行

  • 返回值:有
  • 參數:
  1. $trstyle - 此行 tr 標籤的格式定義,如
  2. $tdstyle <array> - TD 標籤的格式定義,如 class,colspan 等
  3. $tdtext <array> - TD 內顯示的內容
  4. $return 是否返回值
  • 此函數多用於循環中,用來逐行創建一個有規律的數據列表如:論壇版塊列表等
  • 使用方法舉例 ./source/admincp/admincp_forums.php
showtablerow('', array('', ''), array(
	'<input type="checkbox"  name="delete[]" value="'.$mod[uid].'"'.($mod['inherited'] ? ' disabled' : '').' />',
	'<input type="text"  name="displayordernew['.$mod[uid].']" value="'.$mod[displayorder].'" size="2" />',
	"<a href="".ADMINSCRIPT."?mod=forum&action=members&operation=group&uid=$mod[uid]" target="_blank">$mod[username]</a>",
	$modgroups[$mod['groupid']],
	cplang($mod['inherited'] ? 'yes' : 'no'),
));

showsubmit() 創建提交按鈕

  • 返回值:無
  1. $name - 定義提交按鈕的 name 值
  2. $value - 定義按鈕的文字值
  3. $before - 根據此按鈕之前的屬性來輸出樣式
  4. $after - 根據此按鈕之後的屬性來輸出樣式
  5. $floatright - 是否有浮動
  6. $entersubmit - 是否使用回車定義按鈕提交動作

showhiddenfields() 創建隱藏表單域

  • 返回值:無
  • 參數:
  1. $hiddenfields <array> 以數組形式傳入,循環輸出隱藏表單域

showsubmenu() 二級導航欄顯示

  • 參數:
    1. $title - 二級導航的當前欄標題
    2. $menus <array> - 多個子導航
    • 使用方法舉例:
    • 後台-用户-會員管理
    showsubmenu('nav_members', array(
    	array('search', 'members&operation=search', 1),
    	array('clean', 'members&operation=clean', 0),
    	array('nav_repeat', 'members&operation=repeat', 0),
    ));
    

    shownav() 麪包屑導航欄顯示及二級導航欄標題

    • 返回值:無
    • 參數:
    1. $header - 導航起點
    2. $menu - 子導航標題
    3. $nav - 麪包屑導航第三層
    • 使用方法舉例:
    • 後台-運營-電子商務
    shownav('extended', 'nav_ec', 'nav_ec_config');

    以上列舉的均為最常用後台函數,仔細瞭解這些函數的使用已經能夠滿足您對 Discuz! X 系列版本的後台開發需求