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! - 官方网站]
[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]标记的处理中有缺陷