Discuz! 7.0 - 数据调用中[show]标记的处理中有缺陷

Discuz!7.0中的数据调用功能存在缺陷,当使用多个[show=order]...[/show]标记且order值不同时,无法按预期显示模板内容。此问题源于对这些标记的处理逻辑,该逻辑仅考虑了首个标记的order值。

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

Discuz! 7.0 - 数据调用中[show]标记的处理中有缺陷

指定行显示模板包含符: [show=order]...[/show]表示被包含在内的模板只在第 order 行显示,但是在实际使用时就会发现,当仅有一个[show=order]...[/show]标记时,结果符合预期,有多个[show=order]...[/show]标记,而且其中的order值都相同时,结果也符合预期,当多个[show=order]...[/show]标记中order值不同时,结果就无法符合预期,相关源代码位于/include/request.func.php,如下所示:

functionnodereplace($replace, $requesttemplate){
$return=$requesttemplate;
if(preg_match("//[show=(/d+)/].+?/[//show/]/is", $requesttemplate, $show)){
if($show[1]==$replace['{order}']){
$return=preg_replace("//[show=/d+/](.+?)/[//show/]/is", '//1', $return);
}else{
$return=preg_replace("//[show=/d+/].+?/[//show/]/is", '', $return);
}
}
returnstr_replace(array_keys($replace), $replace, $return);
}

从代码中可以看到,程序搜索第一个[show=order]...[/show],获取其中的order值,并和当前处理的条数比较,如果相等的话,则显示所有[show=order]...[/show]标记中包含的内容,如果不相等的话,则删除所有[show=order]...[/show]标记中的内容。所以当多个[show=order]...[/show]标记中order值不同时,结果就无法符合预期。

[Discuz! - 官方网站]

http://www.discuz.net/

[Discuz! - 常见问题]

Discuz! 6.1 从GBK编码转为UTF-8编码
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 模块调用脚本范例程序 - 多选下拉的缺陷以及使用方法

Discuz! 6.1 - 自动禁止非公开版面向Home推送事件

Discuz! 6.1~7.0 - 解决jQuery兼容问题

Discuz! 7.0 - 修正topicadmin中警告短消息缺失信息的缺陷

Discuz! 7.0 - 数据调用中[show]标记的处理中有缺陷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值