今日,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.") ";
}
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的具体细节。