PHP dedecms 子栏目不见了,完美解决

1 篇文章 0 订阅
1 篇文章 0 订阅

今日,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的具体细节。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq540061627

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值