discuz 后台页面开发
后台页面开发
- 创建项目
在 ./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()表单显示
- 返回值:无
- 参数:
- $setname - 指定输出标题,如:setting_basic_bbname, 自动匹配描述文字为:setting_basic_bbname_comment,comment形式文字可以在./source/language/lang_admincp.php语言包中添加
- $varname - 指定表单的name值,如settingnew[bbname]
- $value - 指定表单默认值\变量
- $type - 表单样式
- radio单选
- text文本、password密码、number数字
- file上传文件
- filetext 上传文件或在线文件切换型表单
- textarea 多行文本
- select 选择框
- mradio 高级单选模式
- mcheckbox 高级多选模式
- binmcheckbox 二进制数值多选模式
- mselect 高级选择框模式
- color 颜色选择
- calendar 日期选择
- multiply多表单型,daterange时间范围
- 其他未在上述样式中出现的$type均独立输出
- $disabled - 是否不可修改
- $hidden - 是否隐藏
- $comment - 强制描述文字
- $extra - 表单扩展属性
- $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()提示消息
- 返回值:无
- 参数:
- $message - lang_admincp_msg.php 语言包中需要输出的key
- $url - 提示信息后跳转的页面,留空则返回上一页
- $type - 特殊提示信息时指定页面的提示样式,可选参数:succeed、error、download、loadingform
- $values - 为语言包中的变量关键词指定值,以数组形式输入
- $extra - 消息文字扩展
- $halt - 是否输出“Discuz! 提示”标题
- 使用方法举例:
- 成功提示信息
cpmsg('tasks_installed', 'action=tasks&operation=type', 'succeed');
- 错误提示信息,并传递变量(cachethreaddir为要传递如语言包中的变量关键词)
cpmsg('cachethread_dir_noexists', '', 'error', array('cachethreaddir' => $settingnew['cachethreaddir']));
showformheader()创建表单头
- 返回值:无
- 参数:
- $action - 表单action的一部分,程序会自动添加 admincp.php?action= 这些内容
- $extra - 表单附加属性,可以是样式等
- $name - 表单的name和id
- $method - 表单提交方式
- 使用方法举例,合并版块表单:
showformheader('forums&operation=merge');
showformfooter()创建表单尾
- 无返回值、无参数
- 用于接上showformheader()函数进行收尾工作
showtableheader()创建表格头
- 返回值:无
- 参数:
- $title - 如果输入title则显示标题,class为header,否则仅显示一个table头
- $classname - 定义此输出表格的CSS样式
- $extra - 表格扩展属性
- $titlespan - 表格列数
- 使用方法实例:
showtableheader('forums_edit_posts', 'nobottom');
showtablefooter()创建表格尾
用于接上showformheader()函数进行收尾工作
showtablerow()创建列表式页面的行
- 返回值:有
- 参数:
- $trstyle - 此行 tr 标签的格式定义,如 class="partition"
- $tdstyle <array> - TD 标签的格式定义,如 class,colspan 等
- $tdtext <array> - TD内显示的内容
- $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()创建提交按钮
- 返回值:无
- $name - 定义提交按钮的name值
- $value - 定义按钮的文字值
- $before - 根据此按钮之前的属性来输出样式
- $after - 根据此按钮之后的属性来输出样式
- $floatright - 是否有浮动
- $entersubmit - 是否使用回车定义按钮提交动作
showhiddenfields()创建隐藏表单域
- 返回值:无
- 参数:
- $hiddenfields <array> 以数组形式传入,循环输出隐藏表单域
showsubmenu()二级导航栏显示
参数:
- $title - 二级导航的当前栏标题
- $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()面包屑导航栏显示及二级导航栏标题
- 返回值:无
- 参数:
- $header - 导航起点
- $menu - 子导航标题
- $nav - 面包屑导航第三层
- 使用方法举例:
- 后台-运营-电子商务
shownav('extended', 'nav_ec', 'nav_ec_config');
以上列举的均为最常用后台函数,仔细了解这些函数的使用已经能够满足您对 Discuz! X 系列版本的后台开发需求
- <?php
- if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
- exit('Access Denied');
- }
- @set_time_limit(600);
- cpheader();
- shownav('global', '人才网用户组');//顶左部
- /********operation=="group"**********/
- if($operation == "group"){
- if(!submitcheck("settingsubmit")){//没有表单提交
- if(empty($_G['gp_groupid'])){
- showsubmenu('人才网用户组',array(//导航菜单
- array('用户组','job&operation=group',1),
- array('过期用户组','job&operation=expirygroup',0)
- ));
- showtips('job_admin_tips');//顶部相关信息,帮助信息
- showformheader("");//表单开始
- showtableheader('人才网专属用户组列表', 'fixpadding');//表格开始
- showsubtitle(array('组头衔', '组ID', '价格(交易积分/天)','购买下限(天数)','编辑'));//表首行<th>
- $result = DB::query("SELECT grouptitle,groupid,system FROM ".DB::table('common_usergroup')." WHERE type='special' AND groupid>'19' ORDER BY groupid");
- while($group = DB::fetch($result)){
- list($group['dailyprice'], $group['minspan']) = explode("\t", $group['system']);
- $newgroup = array(
- $group['grouptitle'],
- $group['groupid'],
- $group['dailyprice'],
- $group['minspan'],
- "<a href='admin.php?action=job&operation=group&groupid={$group['groupid']}&grouptitle={$group['grouptitle']}'>编辑</a>"
- );
- showtablerow('', array('width="150"','width="150"','width="150"','width="150"'), $newgroup);
- }
- showtablefooter();//表格结束
- showformfooter();//表单结束
- }else{
- $groupid = $_G['gp_groupid'];
- $grouptitle = $_G['gp_grouptitle'];
- $group = DB::fetch_first("SELECT * FROM ".DB::table('common_usergroup_field')." WHERE groupid=$groupid");
- showsubmenu("编辑用户组-{$grouptitle}(groupid:{$groupid})",array());
- showformheader("job&operation=group","","groupsetting");
- echo "<input type='hidden' name='groupid' value='{$groupid}' />";
- showtableheader();
- showsetting('开启个人求职模块', 'settingnew[allowjobperson]', $group['allowjobperson'], 'radio');
- showsetting('开启招聘管理模块', 'settingnew[allowjobcompany]', $group['allowjobcompany'], 'radio');
- showsetting('设为基本用户组(成功注册会员将可进行选择)','settingnew[allowjobbasic]',$group['allowjobbasic'],'radio');
- showsubmit('settingsubmit');
- showtablefooter();
- showformfooter();
- }
- }else{//有表单提交
- $group = $_G['gp_settingnew'];
- $groupid = $_G['gp_groupid'];
- $newdata = array(
- "allowjobperson" => $group['allowjobperson'],
- "allowjobcompany" => $group['allowjobcompany'],
- "allowjobbasic" => $group['allowjobbasic']
- );
- $res = DB::update("common_usergroup_field",$newdata,array("groupid"=>$groupid));
- if($res){
- cpmsg("用户组更新成功","action=job&operation=group&groupid=$groupid","succeed");
- }else{
- cpmsg("未更新成功","","error");
- }
- }
- }
- /*********operation=test***********/
- if($operation == "expirygroup"){
- showsubmenu('人才网用户组',array(
- array('用户组','job&operation=group',0),
- array('过期用户组','job&operation=expirygroup',1)
- ));
- echo "这里将能设定过期之后默认用户组!";
- }
- ?>
页面效果:
那么是如何在用户左边栏自定义添加选项呢
首先在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中声明
- admincp.php 86行加入‘menu_class_list’、‘menu_teacher_list’:
- 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行加入
- //添加顶部菜单
- showheader('family','menu_class_list');
复制代码
3、定义自定义菜单的语言文件,admincp.menu.lang.php 24行加入
- //添加顶部菜单
- 'header_family' => '家庭平台',
- 'menu_class_list' => '课程',
- 'menu_teacher_list' => '老师',
复制代码
4、定义侧栏菜单,menu.inc.php 96行加入
- //添加顶部菜单
- showmenu('family', array(
- array('menu_class_list', 'members'),
- array('menu_teacher_list', 'adv'),
- ));
- //------
复制代码
5、由于discuz后台显示通过JS调用显示,所以必须在main.inc.php111行加入
- 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 后台页面开发相关推荐
- Discuz后台页面开发
创建项目 在 ./source/admincp/menu/ 目录下创建 menu_mynav.php 文件 在"管理中心-全局"中加一个项目,需要在 menu_mynav.php ...
- discuz 后台页面扩展开发
创建项目 除了$menu['global'] 是全局 关键字还有 indexglobalstyletopicuserportalforumgroupextendedcloud 分别对应后台上导航 在 ...
- discuz 二次开发
转载地址:http://www.cnblogs.com/LY-leo/p/5843439.html discuz 框架也算是比较流行的社区论坛框架,discuz 的基础架构采用世界上最流行的 web ...
- Discuz 二次开发 (一) 目录结构和运行逻辑
Discuz 二次开发 (一) 目录结构和运行逻辑 目录结构 DISCUZ使用自己的框架,与现在主流的web框架不同,DISCUZ没有路由表,他的路由是由入口文件来实现的. api uc.php UC ...
- Discuz二次开发基本知识详细讲解
Discuz是国内最流行的论坛软件管理系统,今天小编跟大家分享一篇关于Discuz二次开发基本知识详细讲解,感兴趣的朋友跟小编一起来了解一下吧! 一) Discuz!的文件系统目录注:想搞DZ开发,就 ...
- discuz php接口文档,Discuz二次开发技术文档
点评:Discuz二次开发基本知识总结,需要对discuz进行二次开发的朋友可以参考下. 一) Discuz!的文件系统目录 注:想搞DZ开发,就得弄懂DZ中每个文件的功能. a) Admin:后台管 ...
- discuz php接口文档,Discuz二次开发手册.doc
Discuz二次开发手册 Discuz文件说明,有助于discuz爱好者,进行自己的开发,在这里提供方便 admincp.php--后台系统设置主程序文件,一般只处理菜单的显示的访问权限,不处理管理控 ...
- 这可能是东半球最保姆级的后台服务器开发学习路线
作者 | 编程指北 来源 | 编程指北(id :cs_dev) 前言 这一篇的主题是「Linux C/C++ 服务器/后台开发学习路线」. 这样的文章相信大家都见得不少了,写之前也非常忐忑,能不能和其 ...
- kingadmin页面开发
参考:https://www.cnblogs.com/Eric15/articles/9247723.html kingadmin页面开发基于CRM开发,详情请参考上述链接 Kingadmin 前戏: ...
最新文章
- gear s3刷android wear,3星gear|3星gear s3自动选择手表刷机办法图文详细教程以及风险介绍...
- python怎么字体加阴影_如何在pythonptx中给文本添加阴影?
- mac 上搭建gitlabel_在mac终端中使用git(适用于github、gitlabel)
- 万物皆可JOJO:这个GAN直接让马斯克不做人啦 | Demo可玩
- Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...
- 项目管理一般知识:单个项目的管理过程
- Palindromic Twist(CF-1027A)
- 利用dbms_metadata.get_ddl查看DDL语句
- Kafka核心源码解析 - SocketServer源码解析
- 男人必读:女人64个谜团
- centos7中,mysql连接报错:1130 - Host ‘118.111.111.111’ is not allowed to connect to this MariaDB server...
- 阿里小蜜多模态知识图谱的构建及应用
- python优秀源码新闻系统_[内附完整源码和文档] 基于python的新闻检索系统
- 第三周 3.13-3.19
- SSH连接工具-Tabby
- 社交网络分析(igraph)
- 最小平方误差算法(LMSE) python实现
- 根据程序流程图化程序流图_程序流程图有什么用?简单实用的流程图模板大全...
- 薪资待遇#23届#海尔#嵌入式软件
- 【AI with ML】第 7 章 :用于自然语言处理的递归神经网络
热门文章
- php多维数组和对象,在PHP中将多维多对象数组转换为标准多维数组
- 考研计算机组成原电路知识,2021考研计算机大纲408计算机组成原理部分原文解析...
- mongodb jar包_MongoDB是什么?看完你就知道了!
- 【c语言】蓝桥杯算法训练 薪水计算
- linux查看vsftpd目录,vsFTPd常用功能之设置虚拟路径和查看日志信息
- qpython3h手机版 写弹窗代码_Android Q之气泡弹窗的实现示例
- 洛谷P1006 传纸条 (棋盘dp)
- 记一次腾讯霸面---前端
- 【剑指offer】整数中1出现的次数,C++实现
- 一分钟了解阿里云产品:高性能计算HPC