Discuz!x3.4 tag 标签重复显示的解决方法!
Discuz tag标签出了问题,编辑一次就添加一个标签。要解决Discuz标签重复,可以通过修改sourcemoduleforumforum_viewthread.php来实现。
用notepad++之类的文本编辑软件打开forum_viewthread.php,搜索以下内容
$tagarray_all = explode("\t", $post['tags']);
将该行下方的以下代码
if($tagarray_all) { foreach($tagarray_all as $var) { if($var) { $tag = explode(',', $var); $posttag_array[] = $tag; $tagnames[] = $tag; } }}
修改为
$tagIds=array();if($tagarray_all) { foreach($tagarray_all as $var) {if($var) { $tag = explode(',', $var); if(in_array($tag, $tagIds, true)){ continue;} $tagIds[]=$tag; $posttag_array[] = $tag; $tagnames[] = $tag; } }}
更新缓存。 你提供的解决方案是通过修改 `forum_viewthread.php` 文件来解决 Discuz! X3.4 中标签重复显示的问题。这个问题的根源在于标签数据被重复处理,导致每次编辑帖子时都会添加相同的标签。
### 解决方案分析:
1. **问题原因**:
- 在 `forum_viewthread.php` 文件中,标签数据被多次处理,导致相同的标签被重复添加到帖子中。
- 每次编辑帖子时,标签数据会被重新解析并添加到帖子中,而没有去重机制。
2. **解决方案**:
- 通过引入一个数组 `$tagIds` 来存储已经处理过的标签 ID,确保每个标签只被处理一次。
- 使用 `in_array()` 函数检查当前标签是否已经被处理过,如果已经处理过,则跳过该标签。
### 修改后的代码:
$tagIds = array();
if ($tagarray_all) {
foreach ($tagarray_all as $var) {
if ($var) {
$tag = explode(',', $var);
if (in_array($tag, $tagIds, true)) {
continue;
}
$tagIds[] = $tag; // 将当前标签添加到已处理标签数组中
$posttag_array = $tag;
$tagnames = $tag;
}
}
}
### 修改步骤:
1. 使用文本编辑器(如 Notepad++)打开 `source/module/forum/forum_viewthread.php` 文件。
2. 搜索 `$tagarray_all = explode("\t", $post);` 这一行。
3. 找到下方的代码块,并将其替换为上述修改后的代码。
4. 保存文件并上传到服务器。
5. 更新 Discuz! 缓存,确保修改生效。
### 注意事项:
- 在修改文件之前,建议备份原始文件,以防修改出错。
- 修改完成后,建议在测试环境中验证修改效果,确保问题已解决且没有引入新的问题。
- 如果站点使用了缓存插件或 CDN,请确保清除所有缓存,以便修改立即生效。
### 其他可能的解决方案:
如果上述方法未能解决问题,或者你不希望直接修改核心文件,还可以考虑以下方法:
1. **使用插件**:在 DZ插件网(https://www.dz-x.net/)上搜索是否有相关的插件可以解决标签重复的问题。
2. **数据库修复**:检查 `pre_forum_post` 表中的标签字段,手动清理重复的标签数据。
希望这个解决方案能帮助你解决 Discuz! X3.4 中标签重复显示的问题。如果还有其他问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 你提到的这个问题是Discuz! X3.4中标签重复显示的一个常见问题。通过修改`source/module/forum/forum_viewthread.php`文件中的代码,可以有效地解决这个问题。以下是详细的步骤和解释:
### 1. 打开文件
使用Notepad++或其他文本编辑软件打开`source/module/forum/forum_viewthread.php`文件。
### 2. 查找代码
在文件中搜索以下代码:
$tagarray_all = explode("\t", $post);
### 3. 修改代码
找到该行下方的代码块:
if($tagarray_all) {
foreach($tagarray_all as $var) {
if($var) {
$tag = explode(',', $var);
$posttag_array = $tag;
$tagnames = $tag;
}
}
}
将其修改为:
$tagIds = array();
if($tagarray_all) {
foreach($tagarray_all as $var) {
if($var) {
$tag = explode(',', $var);
if(in_array($tag, $tagIds, true)) {
continue;
}
$tagIds[] = $tag;
$posttag_array = $tag;
$tagnames = $tag;
}
}
}
### 4. 保存文件
保存修改后的文件。
### 5. 更新缓存
登录Discuz!后台,进入“工具” -> “更新缓存”,点击“提交”以更新缓存。
### 代码解释
- `$tagIds = array();`:初始化一个空数组,用于存储已经处理过的标签ID。
- `if(in_array($tag, $tagIds, true)) { continue; }`:检查当前标签是否已经存在于`$tagIds`数组中,如果存在则跳过当前循环,避免重复处理。
- `$tagIds[] = $tag;`:将当前标签添加到`$tagIds`数组中,以便后续检查。
### 注意事项
- 在修改代码之前,建议备份原始文件,以防修改错误导致问题。
- 如果你对PHP代码不熟悉,建议在修改前咨询有经验的开发者。
通过以上步骤,你应该能够解决Discuz! X3.4中标签重复显示的问题。如果还有其他问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]