后台页面开发

  • 创建项目

在 ./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 标签的格式定义,如 class="partition"
  2. $tdstyle <array> - TD 标签的格式定义,如 class,colspan 等
  3. $tdtext <array> - TD内显示的内容
  4. $return 是否返回值
  • 此函数多用于循环中,用来逐行创建一个有规律的数据列表如:论坛版块列表等
  • 使用方法举例 ./source/admincp/admincp_forums.php
showtablerow('', array('class="td25"', 'class="td28"'), array('<input type="checkbox" class="checkbox" name="delete[]" value="'.$mod[uid].'"'.($mod['inherited'] ? ' disabled' : '').' />','<input type="text" class="txt" 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 系列版本的后台开发需求

  1. <?php
  2. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  3. exit('Access Denied');
  4. }
  5. @set_time_limit(600);
  6. cpheader();
  7. shownav('global', '人才网用户组');//顶左部
  8. /********operation=="group"**********/
  9. if($operation == "group"){
  10. if(!submitcheck("settingsubmit")){//没有表单提交
  11. if(empty($_G['gp_groupid'])){
  12. showsubmenu('人才网用户组',array(//导航菜单
  13. array('用户组','job&operation=group',1),
  14. array('过期用户组','job&operation=expirygroup',0)
  15. ));
  16. showtips('job_admin_tips');//顶部相关信息,帮助信息
  17. showformheader("");//表单开始
  18. showtableheader('人才网专属用户组列表', 'fixpadding');//表格开始
  19. showsubtitle(array('组头衔', '组ID', '价格(交易积分/天)','购买下限(天数)','编辑'));//表首行<th>
  20. $result = DB::query("SELECT grouptitle,groupid,system FROM ".DB::table('common_usergroup')." WHERE type='special' AND groupid>'19' ORDER BY groupid");
  21. while($group = DB::fetch($result)){
  22. list($group['dailyprice'], $group['minspan']) = explode("\t", $group['system']);
  23. $newgroup = array(
  24. $group['grouptitle'],
  25. $group['groupid'],
  26. $group['dailyprice'],
  27. $group['minspan'],
  28. "<a href='admin.php?action=job&operation=group&groupid={$group['groupid']}&grouptitle={$group['grouptitle']}'>编辑</a>"
  29. );
  30. showtablerow('', array('width="150"','width="150"','width="150"','width="150"'), $newgroup);
  31. }
  32. showtablefooter();//表格结束
  33. showformfooter();//表单结束
  34. }else{
  35. $groupid = $_G['gp_groupid'];
  36. $grouptitle = $_G['gp_grouptitle'];
  37. $group = DB::fetch_first("SELECT * FROM ".DB::table('common_usergroup_field')." WHERE groupid=$groupid");
  38. showsubmenu("编辑用户组-{$grouptitle}(groupid:{$groupid})",array());
  39. showformheader("job&operation=group","","groupsetting");
  40. echo "<input type='hidden' name='groupid' value='{$groupid}' />";
  41. showtableheader();
  42. showsetting('开启个人求职模块', 'settingnew[allowjobperson]', $group['allowjobperson'], 'radio');
  43. showsetting('开启招聘管理模块', 'settingnew[allowjobcompany]', $group['allowjobcompany'], 'radio');
  44. showsetting('设为基本用户组(成功注册会员将可进行选择)','settingnew[allowjobbasic]',$group['allowjobbasic'],'radio');
  45. showsubmit('settingsubmit');
  46. showtablefooter();
  47. showformfooter();
  48. }
  49. }else{//有表单提交
  50. $group = $_G['gp_settingnew'];
  51. $groupid = $_G['gp_groupid'];
  52. $newdata = array(
  53. "allowjobperson" => $group['allowjobperson'],
  54. "allowjobcompany" => $group['allowjobcompany'],
  55. "allowjobbasic" => $group['allowjobbasic']
  56. );
  57. $res = DB::update("common_usergroup_field",$newdata,array("groupid"=>$groupid));
  58. if($res){
  59. cpmsg("用户组更新成功","action=job&operation=group&groupid=$groupid","succeed");
  60. }else{
  61. cpmsg("未更新成功","","error");
  62. }
  63. }
  64. }
  65. /*********operation=test***********/
  66. if($operation == "expirygroup"){
  67. showsubmenu('人才网用户组',array(
  68. array('用户组','job&operation=group',0),
  69. array('过期用户组','job&operation=expirygroup',1)
  70. ));
  71. echo "这里将能设定过期之后默认用户组!";
  72. }
  73. ?>

页面效果:

那么是如何在用户左边栏自定义添加选项呢

首先在source/admincp/menu下新增文件menu_job.php

然后在source/language下增加lang_admincp_job.php如下 ,这个是语言包

对了,上面的代码文件是在admincp_job.php中,放在source/admincp目录下

下面说说原理:

那么job_group页面会跳转到哪呢?它将跳转到  href="admin.php?action=job&operation=group"

job_group被分隔为action=job&operation=group

同理job_expirygroup被分隔为action=job&operation=expirygroup

admin.php?action=job 页面将跳转到admincp_job.php

有图有真相:

现在discuz论坛越来越火热,那么Discuz!二次开发如何添加后台管理模块?下面我们就一起来分享下:

涉及到的文件:
admincp.php 后台入口文件
main.inc.php 定义后台界面模板显示文件
admincp.menu.lang.php 后台管理语言文件
menu.inc.php 后台界面菜单定义文件

1、在变量$action中声明

  1. admincp.php 86行加入‘menu_class_list’、‘menu_teacher_list’:
  2. in_array($action, array('home', 'settings', 'members', 'profilefields', 'admingroups', 'usergroups', 'ranks', 'forums', 'threadtypes', 'threads', 'moderate', 'attach', 'smilies', 'recyclebin', 'prune', 'styles', 'plugins', 'tasks', 'magics', 'medals', 'google', 'qihoo', 'video', 'announce', 'faq', 'ec', 'tradelog', 'creditwizard', 'jswizard', 'project', 'counter', 'misc', 'adv', 'insenz', 'logs', 'tools', 'checktools', 'search', 'upgrade','menu_class_list','menu_teacher_list');

复制代码

2、定义自定义顶部菜单的默认显示,main.inc.php  55行加入

  1. //添加顶部菜单
  2. showheader('family','menu_class_list');

复制代码

3、定义自定义菜单的语言文件,admincp.menu.lang.php 24行加入

  1. //添加顶部菜单
  2. 'header_family' => '家庭平台',
  3. 'menu_class_list' => '课程',
  4. 'menu_teacher_list' => '老师',

复制代码

4、定义侧栏菜单,menu.inc.php 96行加入

  1. //添加顶部菜单
  2. showmenu('family', array(
  3. array('menu_class_list', 'members'),
  4. array('menu_teacher_list', 'adv'),
  5. ));
  6. //------

复制代码

5、由于discuz后台显示通过JS调用显示,所以必须在main.inc.php111行加入

  1. var headers = new Array('index', 'global', 'style', 'forum', 'user', 'topic', 'extended', 'adv','family', 'tool'$ucadd);

复制代码

6、/admin文件中定义程序文件
menu_class_list.inc.php
menu_teacher_list.inc.php

discuz 后台页面开发相关推荐

  1. Discuz后台页面开发

    创建项目 在 ./source/admincp/menu/ 目录下创建 menu_mynav.php 文件 在"管理中心-全局"中加一个项目,需要在 menu_mynav.php ...

  2. discuz 后台页面扩展开发

    创建项目 除了$menu['global'] 是全局 关键字还有 indexglobalstyletopicuserportalforumgroupextendedcloud 分别对应后台上导航 在 ...

  3. discuz 二次开发

    转载地址:http://www.cnblogs.com/LY-leo/p/5843439.html discuz 框架也算是比较流行的社区论坛框架,discuz 的基础架构采用世界上最流行的 web ...

  4. Discuz 二次开发 (一) 目录结构和运行逻辑

    Discuz 二次开发 (一) 目录结构和运行逻辑 目录结构 DISCUZ使用自己的框架,与现在主流的web框架不同,DISCUZ没有路由表,他的路由是由入口文件来实现的. api uc.php UC ...

  5. Discuz二次开发基本知识详细讲解

    Discuz是国内最流行的论坛软件管理系统,今天小编跟大家分享一篇关于Discuz二次开发基本知识详细讲解,感兴趣的朋友跟小编一起来了解一下吧! 一) Discuz!的文件系统目录注:想搞DZ开发,就 ...

  6. discuz php接口文档,Discuz二次开发技术文档

    点评:Discuz二次开发基本知识总结,需要对discuz进行二次开发的朋友可以参考下. 一) Discuz!的文件系统目录 注:想搞DZ开发,就得弄懂DZ中每个文件的功能. a) Admin:后台管 ...

  7. discuz php接口文档,Discuz二次开发手册.doc

    Discuz二次开发手册 Discuz文件说明,有助于discuz爱好者,进行自己的开发,在这里提供方便 admincp.php--后台系统设置主程序文件,一般只处理菜单的显示的访问权限,不处理管理控 ...

  8. 这可能是东半球最保姆级的后台服务器开发学习路线

    作者 | 编程指北 来源 | 编程指北(id :cs_dev) 前言 这一篇的主题是「Linux C/C++ 服务器/后台开发学习路线」. 这样的文章相信大家都见得不少了,写之前也非常忐忑,能不能和其 ...

  9. kingadmin页面开发

    参考:https://www.cnblogs.com/Eric15/articles/9247723.html kingadmin页面开发基于CRM开发,详情请参考上述链接 Kingadmin 前戏: ...

最新文章

  1. gear s3刷android wear,3星gear|3星gear s3自动选择手表刷机办法图文详细教程以及风险介绍...
  2. python怎么字体加阴影_如何在pythonptx中给文本添加阴影?
  3. mac 上搭建gitlabel_在mac终端中使用git(适用于github、gitlabel)
  4. 万物皆可JOJO:这个GAN直接让马斯克不做人啦 | Demo可玩
  5. Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...
  6. 项目管理一般知识:单个项目的管理过程
  7. Palindromic Twist(CF-1027A)
  8. 利用dbms_metadata.get_ddl查看DDL语句
  9. Kafka核心源码解析 - SocketServer源码解析
  10. 男人必读:女人64个谜团
  11. centos7中,mysql连接报错:1130 - Host ‘118.111.111.111’ is not allowed to connect to this MariaDB server...
  12. 阿里小蜜多模态知识图谱的构建及应用
  13. python优秀源码新闻系统_[内附完整源码和文档] 基于python的新闻检索系统
  14. 第三周 3.13-3.19
  15. SSH连接工具-Tabby
  16. 社交网络分析(igraph)
  17. 最小平方误差算法(LMSE) python实现
  18. 根据程序流程图化程序流图_程序流程图有什么用?简单实用的流程图模板大全...
  19. 薪资待遇#23届#海尔#嵌入式软件
  20. 【AI with ML】第 7 章 :用于自然语言处理的递归神经网络

热门文章

  1. php多维数组和对象,在PHP中将多维多对象数组转换为标准多维数组
  2. 考研计算机组成原电路知识,2021考研计算机大纲408计算机组成原理部分原文解析...
  3. mongodb jar包_MongoDB是什么?看完你就知道了!
  4. 【c语言】蓝桥杯算法训练 薪水计算
  5. linux查看vsftpd目录,vsFTPd常用功能之设置虚拟路径和查看日志信息
  6. qpython3h手机版 写弹窗代码_Android Q之气泡弹窗的实现示例
  7. 洛谷P1006 传纸条 (棋盘dp)
  8. 记一次腾讯霸面---前端
  9. 【剑指offer】整数中1出现的次数,C++实现
  10. 一分钟了解阿里云产品:高性能计算HPC