V9顶级栏目或二级栏目设置生成到根目录时其子栏目访问出错的解决办法
最近在改动网站URL结构的时候发现一处问题(可能不算bug),就是设置了顶级栏目或者二级三级栏目生成到根目录后,它下面的子栏目打不开,发现系统也把子栏目生成到根目录了以至于跟系统的路径不一致。网上搜索了下很多人都遇到此问题不知道怎么解决,现在花了点时间把解决办法整理出来,供遇到此问题的鞋童参考!
下面是我网站的栏目URL规则
下面是我网站的栏目结构
物流线路
|
——福建省
如果把顶级栏目“物流线路”设置生成到根目录,那么其子栏目“福建省”对应的URL为“wuliuxianlu/fujian/”,但是在后台生成栏目后,访问“福建省”栏目会出现404错误,检查发现栏目HTML路径没错,但是系统也把这个子栏目生成到根目录了,自然我们访问会出现404了。
下面是二种解决办法
一、不修改文件的解决办法
经过测试,只需要先更新栏目缓存再生成栏目页即可解决这个问题。
二、修改文件的解决办法
这样不更新栏目缓存直接生成栏目页就可以解决这个问题。
解决办法如下
找到 phpcmsmodulesadmincategory.php 大概573行,找到以下代码注释或者删除
if ($setting['creat_to_html_root']) {
return '';
} else {
$arrparentid = explode(',', $arrparentid);
$arrcatdir = array();
foreach($arrparentid as $id) {
if($id==0) continue;
$arrcatdir[] = $this->categorys[$id]['catdir'];
}
return implode('/', $arrcatdir).'/';
}
然后添加下面代码
if ($setting['create_to_html_root']) return '';
if ($this->categorys[$catid]['parentid']) {
$dir = $this->categorys[$this->categorys[$catid]['parentid']]['catdir'].'/'; //得到父栏目的英文目录 如:news/
return $this->get_parentdir($this->categorys[$catid]['parentid']).$dir; //父栏目路径 = 爷爷栏目路劲+父栏目英文目录 news/+china/
}else{
return $dir;
}
然后进后台=>内容=>栏目管理=>更新栏目缓存,最后更新全站缓存和批量更新栏目页。经本人多次在测试,在任何栏目结构下完美无错,问题全部解决!!!