网站栏目结构如图:
文章栏目采用的 业务范围 - 公司注册 - 注册香港公司 这样的目录结构,目录名分别为 业务范围(fuwu)、公司注册(gongsizhuce)、注册香港公司(xianggang),业务范围(fuwu) 和 公司注册(gongsizhuce) 目录都采用生成到根目录,而注册香港公司(xianggang)采用不生成跟目录相对于上级目录 公司注册(gongsizhuce)。
没有做修改前v9默认生成的更目录下有 fuwu 和 gongsizhuce 两个文件夹,按照我们的要求 xianggang 应该是在 gongsizhuce 目录下,但是事实是 gongsizhuce 目录下没有 xianggang 文件夹。而查看 fuwu 却发现里面多了一个 gongsizhuce 的文件夹,再打开 gongsizhuce 的目录下会有 xianggang 文件夹。也就是当超过三级采用相对路径时phpcms v9的文件夹存储路径就发生了错误。
解决办法如下
查找admin模型下category.php (phpcmsmodulesadmincategory.php)
查找get_parentdir函数(约第565行),把
function get_parentdir($catid) {
if($this->categorys[$catid]['parentid']==0) return '';
$r = $this->categorys[$catid];
$setting = string2array($r['setting']);
$url = $r['url'];
$arrparentid = $r['arrparentid'];
unset($r);
if (strpos($url, '://')===false) {
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).'/';
}
} else {
if ($setting['create_to_html_root']) {
if (preg_match('/^((http|https)://)?([^/]+)/i', $url, $matches)) {
$url = $matches[0].'/';
$rs = $this->db->get_one(array('url'=>$url), '`parentdir`,`catid`');
if ($catid == $rs['catid']) return '';
else return $rs['parentdir'];
} else {
return '';
}
} else {
$arrparentid = explode(',', $arrparentid);
$arrcatdir = array();
krsort($arrparentid);
foreach ($arrparentid as $id) {
if ($id==0) continue;
$arrcatdir[] = $this->categorys[$id]['catdir'];
if ($this->categorys[$id]['parentdir'] == '') break;
}
krsort($arrcatdir);
return implode('/', $arrcatdir).'/';
}
}
}
修改为
function get_parentdir($catid) {
if($this->categorys[$catid]['parentid']==0) return '';
$r = $this->categorys[$catid];
$setting = string2array($r['setting']);
$url = $r['url'];
$arrparentid = $r['arrparentid'];
$pid = $r['parentid'];
unset($r);
if (strpos($url, '://')===false) {
if ($setting['creat_to_html_root']) {
return '';
} else {
$arrparentid = explode(',', $arrparentid);
$arrcatdir = array();
foreach($arrparentid as $id) {
if($id==0) continue;
$rr = $this->categorys[$id];
$rsetting = string2array($rr['setting']);
if($rsetting['create_to_html_root'] && $id==$pid)
{
return $this->categorys[$id]['catdir']."/";
}
else $arrcatdir[] = $this->categorys[$id]['catdir'];
}
return implode('/', $arrcatdir).'/';
}
} else {
if ($setting['create_to_html_root']) {
if (preg_match('/^((http|https)://)?([^/]+)/i', $url, $matches)) {
$url = $matches[0].'/';
$rs = $this->db->get_one(array('url'=>$url), '`parentdir`,`catid`');
if ($catid == $rs['catid']) return '';
else return $rs['parentdir'];
} else {
return '';
}
} else {
$arrparentid = explode(',', $arrparentid);
$arrcatdir = array();
krsort($arrparentid);
foreach ($arrparentid as $id) {
if ($id==0) continue;
$arrcatdir[] = $this->categorys[$id]['catdir'];
if ($this->categorys[$id]['parentdir'] == '') break;
}
krsort($arrcatdir);
return implode('/', $arrcatdir).'/';
}
}
}