找爸爸:解决一个织梦dedecms 父子栏目纲常扰乱且逻辑混淆的怪异问题

这是一个很难描述的问题,先上图。

织梦dedecms栏目层次
网站后台栏目是两级栏目,层次并不复杂。当前栏目为男士衬衫,它是产品中心(男士)这个父栏目的子级栏目,很是清晰明了。

然而,当生成栏目静态页面后浏览器显示结果却出现异常,一个并不存在于此两层关系中的某个顶级栏目名称“企业西服定制”却出现了。如下图中间的红叉部分。

织梦dedecms 父子栏目逻辑混乱
这哪跟哪?好比莫名其妙地出现一个冒名顶替的爸爸,而真正的爸爸却隐藏不见了。真是啧啧怪事!

要怎么样才能把真正的爸爸找出来,就成了要解决的棘手问题。

最初以为是使用了自定义函数GetTopTypename()导致。参见:排除法解决[织梦dedecms生成栏目没反应]问题 揪出罪魁祸首GetTopTypename()

但是对比与观察表现正常的别的生成的栏目页面,发现GetTopTypename()表现很称职。

再在后台网站栏目管理处,针对不同栏目点击“预览”按钮查看,发现在动态预览页面亦如此,正常的还是正常,不正常的还是不正常。

那可以排除的是,这和网站模板中使用的自定义函数GetTopTypename()无关。

既然和模板无关,那只有去网站后台找问题。

因为网站是改版,为了保证以往的后台数据可以复用,直接使用了旧网站的数据库,通过后台备份恢复网站后,对栏目结构做了一定的调整,部分文章也做了移动,给它找了个新爸——移动到其他栏目;另外创建了一些新的栏目和其子栏目,对比发现,新创建的栏目与子栏目,不论是生成静态页或是在后台预览,在网页中的逻辑层次是正常的,不正常的,则是那些带有数据的从旧网站数据库备份恢复的且有些移动过内容页的栏目。

难道是因为从旧网站进行了数据恢复,而造成的缓存导致的吗?

  • 于是在后台更新网站系统缓存,发现不行;
  • 在后台的犄角旮旯里找到更新模板缓存,也没有变化;
  • 按照网上的教程,通过ftp彻底清除dedecms缓存,包括:
    • 删除data/tplcache目录下的所有文件;
    • 删除data\cache目录下的所有文件;
    • 删除data\sessions目录下的所有文件;

都,然并卵!

搞不定,不知啥原因。

(其实问题还是出在换爸爸这,只是当时我只是想到了缓存这个解决之法,请看下文是如何找到问题的原因并解决的)

今天把网站模板、备份数据上传至客户原有网站空间,在后台恢复备份数据后,然后生成内容页面,看看更换网站是否正常。

在生成内容页时,出现一个错误提示:

dedecms错误提示!
咦,这个“个人西服定制”栏目怎么还有文档?我明明是把此栏目下的子栏目的所有文档移动到了其他目录,然后把此栏目属性设置成“频道封面(栏目本身不允许发布文档)”,用于制作单页面而非列表式页面。

不由心眼一亮,立刻和前几天那个问题联系起来,怕是能找到原因所在。

进入后台查看,原来这里边真的藏着一些“漏网之鱼”。

dedecms栏目设置
原来,旧网站的父栏目和子栏目的属性皆是设为“最终列表栏目(允许在本栏目发布文档,并生成文档列表)”。虽然大部分文章都发在了对应的子栏目里,却还有一些发在于父栏目中(通常情况下是子栏目发布文章,而父栏目是不允许发布文档的,这样不易造成混乱),而这些父栏目中的文章页面,还没有搬家移至新的目录,那么这里就还存在着一种旧有的栏目层次之间的逻辑关系

既然发现了一个不易察觉的问题所在,那就尝试去调整一下。

于是检查,如果有就把这些藏在父栏目或顶级栏目中的文章内容,移动至某个对应的子栏目里,直到父栏目(一级栏目)变得干干净净不含一篇内容文章。

如此完成后在后台预览栏目时,发现栏目之间的父子逻辑关系正常了,生成栏目静态页面亦正常,这下子好了,终于恢复了父子纲常的逻辑秩序。

就是这么一个小问题、怪问题,把人折腾得晕菜,然而找到原因后,解决方法又是如此的简单。是为记。

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注