我们在使用帝国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页的时候,是不会显示任何数据的)。
$empire->query("delete from {$dbtbpre}enewstagsdata where id='$id' and classid='$classid'");
截图如下:红框就是添加的代码
完成了以上操作,你会发现还有个小问题,就是信息删除了,tag列表里的信息数量并没有跟着减少,该怎么办了?这里给出了完美的解决方案,你可以把附件下载解压到你的网站 /e/admin/tags/目录下(如果你的TAGS进行过二次开发,不建议你覆盖)。附件文件只是添加了两个方法:
1、sZlTags 该方法主要负责清理tag信息表中不存在的信息
2、sZlTagsNum 该方法主要重新计算tag的数据总和
附件多出的两个功能按钮,大家可以根据需要操作