建站幫助

誠信合作, 高質專業!

Phpcms v9欄目設置是否生成到根目錄后存在路徑錯誤Bug的修正方法

2019-09-05 14:59:13 瀏覽 我要評論

不知道大家發現這一個隱藏很深的路徑問題的Bug沒:當Phpcms v9欄目設置中選中【是否生成到根目錄】后,子集欄目會存在路徑錯誤,CMSYOU在一個資訊項目中就碰到了這一Bug,可以說得上常規使用PC V9 幾年都不會發現的一個Bug,今天CMSYOU在這里與大家分享這一個Bug的修正方法。

估計你看完第一段,還在云里霧里,來具體說明給你聽:實際欄目層級是:第一層欄目》第二層欄目》第三層欄目》第四層欄目,這4個欄目的英文目錄名分別是:one、two、three、four,都設置生成HTML靜態文件,URL規則管理為【{$categorydir}{$catdir}/index.html|{$categorydir}{$catdir}/index_{$page}.html】。具體什么是URL規則?請看以往的文章:PHPCMS V9靜態化HTML生成設置 及URL規則優化

如果【第二層欄目】這個欄目選中了【是否生成到根目錄】,那么【第二層欄目】的路徑為:域名/two/,【第三層欄目】的路徑應該為:域名/two/three,【第四層欄目】的路徑應該為:域名/two/three/four,而實際上Phpcms v9版本因為存在一個bug,實際路徑變成了:

大家看出來Bug所在沒?【第四層欄目】的父級路徑parentdir明顯是錯的,這樣會造成在生成欄目列表頁HTML的時候位置錯誤。

弄清楚這個Bug之后,找到欄目層級關系的方法文件phpcms/modules/admin/category.php,修改756到782行:

$arrparentid = explode(',', $arrparentid);
$arrcatdir = array();
foreach($arrparentid as $id) {
if($id==0) continue;
$arrcatdir[] = $this->categorys[$id]['catdir'];
}
return implode('/', $arrcatdir).'/';

修改為:

$arrparentid = explode(',', $arrparentid);
$arrcatdir = array();
foreach($arrparentid as $id) {
if($id==0) continue;
$arrcatdir[] = $this->categorys[$id]['catdir'];
}
$parentdirs = implode('/', $arrcatdir).'/';
$temp_categorys = $this->db->select(array('siteid'=>$this->siteid,'module'=>'content'), '*', '', 'listorder ASC, catid ASC', '', 'catid');
foreach($arrparentid as $id) {
$temp_r = array();
$temp_r = $temp_categorys[$id];
$temp_setting = string2array($temp_r['setting']);
if($temp_setting['create_to_html_root']){
$temp_parentid = $temp_categorys[$id]['parentid'];
$parent_r = $temp_categorys[$temp_parentid];
$parentdirs = str_replace($parent_r['catdir'].'/', '', $parentdirs);
}
}
return $parentdirs;

保存,然后更新欄目緩存,這樣數據庫里邊的欄目層級關系更新為:

這才是正確的。

 

最后感嘆下,這個Bug一般人還不能碰到,因為基本上沒使用到【是否生成到根目錄】功能設置,一般也不會越級生成HTML。不時研究CMS,并堅持在此分享更多自定義phpcms方法,同時CMSYOU在此多謝大家幾年來的關注與關照!

我要收藏
點個贊吧

相關閱讀

本月熱門

精選推薦

在線客服

掃一掃,關注我們

掃一掃,關注我們
百人牛牛经验分享