当前位置:首页 > 帝国CMS学习

帝国CMS删除信息不同步删除TAG数据修复

作者:Shu | 时间:2020-03-17 | 栏目:帝国CMS学习 | 围观热度:1447

前言

我们在使用帝国CMS增加TAG时,系统会将TAG信息分别存储到3个表,分别为信息副表(phome_ecms_XXX_data_1)的infotags字段(6.6版本是存储在主表里的),TAGS表(phome_enewstags),TAGS信息表(phome_enewstagsdata),当我们在删除信息的时候,TAGS信息表的信息记录并不会被删除。直到你把TAGS表里的TAG删除以后,才会把TAGS信息表关联的信息删除掉。


上图是信息关系图

影响

这算是个BUG吧。如果主信息都删除了,TAGS信息表再存在的话,1是没有意义,2是会造成在前端列举某个TAG的时候分页错误(比如关联某个TAG实际数据有20条,但是从TAGS信息表里记录的是28条数据,如果你按每页10条,是要分3页的,当用户翻页到第3页的时候,是不会显示任何数据的)。

修复

修复这个问题其实很简单,操作方法为:打开 e/class/functions.php 约 1266行,快速搜索“//删除信息相关记录”在删除其他表记录的下一行添加如下代码:
$empire->query("delete from {$dbtbpre}enewstagsdata where id='$id' and classid='$classid'");

截图如下:红框就是添加的代码

扩展

完成了以上操作,你会发现还有个小问题,就是信息删除了,tag列表里的信息数量并没有跟着减少,该怎么办了?这里给出了完美的解决方案,你可以把附件下载解压到你的网站 /e/admin/tags/目录下(如果你的TAGS进行过二次开发,不建议你覆盖)。附件文件只是添加了两个方法:

1、sZlTags 该方法主要负责清理tag信息表中不存在的信息

2、sZlTagsNum 该方法主要重新计算tag的数据总和


附件多出的两个功能按钮,大家可以根据需要操作