Discuz! 7.0 模块调用脚本范例程序 - 多选下拉的缺陷以及使用方法

本文介绍了Discuz!7.0中多选下拉菜单存在的bug及其解决办法,并详细解释了如何正确配置多选下拉菜单以避免数据提交错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Discuz! 7.0 模块调用脚本范例程序 - 多选下拉的缺陷以及使用方法

<?php

/*
模块调用脚本范例程序 - 多选下拉的缺陷以及使用方法
*/

if(!defined('IN_DISCUZ')){
exit('Access Denied');
}

if($requestrun){

/*
模块脚本运行代码
脚本中的设置参数在数组 $settings 中
脚本中不能有输出语句,所有输出结果赋值给变量 $writedata
脚本输出结果自动缓存,缓存时间根据数据调用模块设置而定,如不缓存,可令 $nocache = 1
*/
/**
* 为获取版面信息,包含版面信息缓存文件
*/
includeDISCUZ_ROOT.'./forumdata/cache/cache_forums.php';
/**
* Discuz!中,在使用变量前需要为变量设置初值
*/
$writedata='';
/**
* 为获取分区列表,枚举版面数组的数据项
*/
foreach($_DCACHE['forums']as$group_fid=>$group){
/**
* 依据type为group判断是否为分区
*/
if('group'===$group['type']){
/**
* 为获取分区中的版面列表,枚举版面数组的数据项
*/
foreach($_DCACHE['forums']as$forum_fid=>$forum){
/**
* 依据type为forum判断是否为版面,依据fup是否等于分区ID判断版面是否属于分区
*/
if(('forum'===$forum['type'])&&(intval($forum['fup'])===$group_fid)){
/**
* 依据版面ID判断是否选择了该版面
*/
if(true===in_array(strval($forum_fid), $settings['forums'])){
/**
* 在选择了该版面时,输出相应的信息
*/
$writedata.='<p>'.$group['name'].'- '.$forum['name'].'</p>';
}
/**
* 为获取版面中的子版面列表,枚举版面数组的数据项
*/
foreach($_DCACHE['forums']as$sub_fid=>$sub){
/**
* 依据type为sub判断是否为子版面,依据fup是否等于版面ID判断版面是否属于版面
*/
if(('sub'===$sub['type'])&&(intval($sub['fup'])===$forum_fid)){
/**
* 依据版面ID判断是否选择了该版面
*/
if(true===in_array(strval($sub_fid), $settings['forums'])){
/**
* 在选择了该版面时,输出相应的信息
*/
$writedata.='<p>'.$group['name'].'- '.$forum['name'].'- '.$sub['name'].'</p>';
}
}
}
}
}
}
}
}else{

/*
模块脚本设置参数

版本 $request_version
名称 $request_name
描述 $request_description
版权 $request_copyright
参数 $request_settings

变量名 => array(变量含义, 备注说明, 类型, 选项数组, 默认值)
类型:
text单行文本
textarea多行文本
radio 单选(是/否)
mradio自定义单选
mcheckbox 多选
select单选下拉
mselect 多选下拉
*/
$request_version='1.0';
$request_name='模块调用脚本范例';
$request_description='数组,您可以参照本脚本 ./include/request/'.basename(__FILE__).'中的说明编写模块脚本';
$request_copyright='&copy;';
/**
* 为获取版面信息,包含版面信息缓存文件
*/
includeDISCUZ_ROOT.'./forumdata/cache/cache_forums.php';
/**
* Discuz!中,在使用变量前需要为变量设置初值
*/
$forum_options=array();
/**
* 为获取分区列表,枚举版面数组的数据项
*/
foreach($_DCACHE['forums']as$group_fid=>$group){
/**
* 依据type为group判断是否为分区
*/
if('group'===$group['type']){
/**
* 为获取分区中的版面列表,枚举版面数组的数据项
*/
foreach($_DCACHE['forums']as$forum_fid=>$forum){
/**
* 依据type为forum判断是否为版面,依据fup是否等于分区ID判断版面是否属于分区
*/
if(('forum'===$forum['type'])&&(intval($forum['fup'])===$group_fid)){
/**
* 将版面加入到选项数组
* 多选下拉的每一个选项都是一个数组,其中第一项是值,第二项是内容
*/
$forum_options[]=array($forum_fid, $group['name'].'- '.$forum['name']);
/**
* 为获取版面中的子版面列表,枚举版面数组的数据项
*/
foreach($_DCACHE['forums']as$sub_fid=>$sub){
/**
* 依据type为sub判断是否为子版面,依据fup是否等于版面ID判断版面是否属于版面
*/
if(('sub'===$sub['type'])&&(intval($sub['fup'])===$forum_fid)){
/**
* 将子版面加入到选项数组
*/
$forum_options[]=array($sub_fid, $group['name'].'- '.$forum['name'].'- '.$sub['name']);
}
}
}
}
}
}
/**
* Discuz! 7.0中的数据调用的多选下拉存在bug,说明如下:
* 如果变量名写成forums,则按照/admin/jswizard.inc.php文件第727行
* $varname = in_array($setting[2], array('mradio', 'mcheckbox', 'select', 'mselect')) ? array('parameter[settings]['.$settingvar.']', $setting[3]) : 'parameter[settings]['.$settingvar.']';
* 生成的控件名称将是parameter[settings][forums],仅能用于提交单选值,不能用于提交多选值
* 如果需要提交多选值,则生成的控件名称应当是parameter[settings][forums][],因此变量名应当写成forums][
* 这又导致获取前次提交值出错,在/admin/jswizard.inc.php文件第728行
* $value = $parameter['settings'][$settingvar] != '' ? stripslashes($parameter['settings'][$settingvar]) : $setting[4];
* 在修改变量名后,提交的变量是$parameter['settings']['forums'],但是按照修改后的变量名,该行程序从$parameter['settings']['forums][']取值,不能获取正确的值
* 因此需要将前次提交的值以默认值的方式传入才能保持数据
*/
$request_settings['forums][']=array('版面列表', '选择多个版面', 'mselect', $forum_options, $parameter['settings']['forums']);
}

?>

[Discuz! - 官方网站]

http://www.discuz.net/

[Discuz! - 常见问题]

Discuz! 6.1 从GBK编码转为UTF-8编码
Discuz! 6.1 多语言翻译工作范围
Discuz! 6.1 兼容问题

Discuz! 6.1 发送HTML格式电子邮件

Discuz! 6.1~7.0 安装SupeSite后导致安全漏洞

Discuz! 6.1 不修改模板在贴子上增加收藏按钮

Discuz! 6.1 cpmsg函数在IE下和Firefox下表现不一致

Discuz! 6.1~7.0 升级后request缓存文件名不兼容

Discuz! 6.1~7.0升级后request路径不兼容以及相应修改方案

Discuz! 7.0 模块脚本文件名

Discuz! 7.0 模块调用脚本范例程序 - 模板

Discuz! 7.0 模块调用脚本范例程序 - 数组

Discuz! 7.0 模块调用脚本范例程序 - 主题

Discuz! 7.0 模块调用脚本范例程序 - 多选下拉的缺陷以及使用方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值