網站欄目結構如圖:
文章欄目采用的 業務范圍 - 公司注冊 - 注冊香港公司 這樣的目錄結構,目錄名分別為 業務范圍(fuwu)、公司注冊(gongsizhuce)、注冊香港公司(xianggang),業務范圍(fuwu) 和 公司注冊(gongsizhuce) 目錄都采用生成到根目錄,而注冊香港公司(xianggang)采用不生成跟目錄相對于上級目錄 公司注冊(gongsizhuce)。
沒有做修改前v9默認生成的更目錄下有 fuwu 和 gongsizhuce 兩個文件夾,按照我們的要求 xianggang 應該是在 gongsizhuce 目錄下,但是事實是 gongsizhuce 目錄下沒有 xianggang 文件夾。而查看 fuwu 卻發現里面多了一個 gongsizhuce 的文件夾,再打開 gongsizhuce 的目錄下會有 xianggang 文件夾。也就是當超過三級采用相對路徑時phpcms v9的文件夾存儲路徑就發生了錯誤。
解決辦法如下
查找admin模型下category.php (phpcms\modules\admin\category.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).'/';
}
}
}