今日,pm發來需求:更改中偶然發現背景 《更新文檔HTML》隻生成首頁,新作的需求看不到效果,于是就開始找問題。
此檔案inc_channel_unit_functions.php 代碼:
//--------------------------------
//獲得某ID的下級ID(包括本身)的SQL語句“($tb.typeid=id1 or $tb.typeid=id2...)”
//-----------------------------
function TypeGetSunID($ID,&$dsql,$tb="#@__archives",$channel=0,$onlydd=false)
{
//echo "--".$ID."--".$dsql."--".$tb."--".$channel."--".$onlydd."--"."~!";
//echo "--".$ID."--".$tb."--".$channel."--".$onlydd."--"."~!";
$GLOBALS['idArray'] = array();
TypeGetSunTypes($ID,$dsql,$channel);
$rquery = "";
foreach($GLOBALS['idArray'] as $k=>$v)
{
if($onlydd){
$rquery .= ($rquery=='' ? $k : ",{$k}");
}else{
if($tb!="")
$rquery .= ($rquery!='' ? " Or {$tb}.typeid='$k' " : " {$tb}.typeid='$k' ");
else
$rquery .= ($rquery!='' ? " Or typeid='$k' " : " typeid='$k' ");
}
}
//echo "+++++".$rquery."+++++";
if($onlydd) return $rquery;
else return " (".$rquery.") ";
}
找到這裡,這是查詢子欄目的sql,始終沒看明白怎麼查詢的,隻看到了結果,繼續找這個方法
TypeGetSunTypes
//-----------------------------
// 傳回與某個目相關的下級目錄的類目ID清單(删除類目或文章時調用)
//由于PHP有些版本存在Bug,不能直接使用同一數組在遞歸邏輯,隻能複制副本傳遞給函數
//-----------------------------
function TypeGetSunTypes($ID,&$dsql,$channel=0)
{
global $_Cs;
//echo "----$_Cs----------";
$GLOBALS['idArray'] = array();
if( !is_array($_Cs) ){ require_once(dirname(__FILE__)."/../data/cache/inc_catalog_base.php"); }
TypeGetSunTypesLogic($ID,$_Cs,$channel);
return $GLOBALS['idArray'];
}
看到這個檔案:/../data/cache/inc_catalog_base.php
部分代碼:
<?php
global $_Cs;
$_Cs=array();
$_Cs[9]=array(0,1,1);
$_Cs[7]=array(0,1,1);
$_Cs[35]=array(0,1,1);
$_Cs[11]=array(0,1,1);
$_Cs[12]=array(0,1,1);
$_Cs[13]=array(0,1,1);
$_Cs[14]=array(0,1,1);
$_Cs[17]=array(0,1,1);
$_Cs[26]=array(0,1,1);
$_Cs[21]=array(0,1,1);
$_Cs[22]=array(0,1,1);
$_Cs[16]=array(0,1,1);
$_Cs[24]=array(0,1,1);
$_Cs[15]=array(0,1,1);
$_Cs[19]=array(0,1,1);
$_Cs[23]=array(0,1,1);
$_Cs[18]=array(0,1,1);
$_Cs[820]=array(0,1,1);
$_Cs[28]=array(0,1,1);
$_Cs[822]=array(0,1,1);
$_Cs[2233]=array(0,1,1);
$_Cs[2279]=array(0,1,1);
$_Cs[2379]=array(0,1,1);
$_Cs[2391]=array(0,1,1);
$_Cs[2434]=array(0,1,1);
$_Cs[42]=array(6,1,1);
$_Cs[43]=array(6,1,1);
$_Cs[44]=array(6,1,1);
$_Cs[45]=array(6,1,1);
$_Cs[30]=array(7,1,1);
$_Cs[31]=array(7,1,1);
$_Cs[32]=array(7,1,1);
$_Cs[48]=array(7,1,1);
$_Cs[52]=array(8,1,1);
到此,就執行不下去啦。沒辦法調試了,問下别人,說是這個檔案是系統自動生成,添加欄目與子欄目的對應關系,都存在這個檔案。
所有這個方法:
function TypeGetSunTypesLogic($ID,$sArr,$channel=0)
{
if($ID!=0) $GLOBALS['idArray'][$ID] = $ID;
foreach($sArr as $k=>$v)
{
if( $v[0]==$ID && ($channel==0 || $v[1]==$channel ))
{
TypeGetSunTypesLogic($k,$sArr,$channel);
}
}
}
就有了含義,這個代碼的目的是,周遊inc_catalog_base.php 裡面的對應關系,讀出來供我們使用。
這就明了了,原來inc_catalog_base.php 少了資料,最近的三個大欄目對應關系沒有了。原因是前段時間,伺服器被攻擊,臨時救場,誤替換了本配置檔案。
最後 根據資料庫表 archives 的對應關系select id,reid,topid,channeltype,isdefault,corank,templist,ishidden,ispart from arctype where reid='2779' limit 100;
查找出對應關系,補充完丢失的對應關系。重新登入背景,進行HTML文檔更新,一切正常。
補充:本人以整體的方式了解php,具體文法細節,方法功能仍不太了解,望了解dedecms 的朋友,能較長的描述一下這幾個php檔案裡面,關于擷取欄目以及子欄目ID的具體細節。