酷酷七友软件定做 酷酷七友软件
当前位置:奇葩软件 > 网络技术分享 >

网络技术分享

dedecms后台目录栏目不显示解决方法

dedecms织梦后台目录栏目不显示解决方法

  一个网站迁移,并做了一些栏目的调整,运行了一段时间后,某天突然发现【网站栏目管理】点进去为空,不显示内容,正常应该显示一个栏目列表,把错误报告打开也显示空,根本没法判断是哪里出了问题。

     由于网站是在线上运行着,又懒得拿到本地调试,只好硬着头皮分析了。首先打开栏目catolog_main.php,发现它主要调用了一个typeunit类,于是又找到typeunit.class.admin.php,再定位到ListAllType显示类目用的方法。由于网站在服务器上,只能反复用echo插入来定位了。通过不断高度,发现在这个 function GetTotalArc($tid)里卡住了,有个if没返回值,手动中了个return -1,刷新栏目,列表能显示了,但都显示-1,看着就不爽,而且点击栏目还没任何反应。

    于是又只能再分析下去,看到每个栏目都是调用一个catlog_do.php,再打开看,传过来的参数else if($dopost=="listArchives"),里面又调用了个content_list.php.再次跟进去,又是一步步echo。

    定位到这行:  $whereSql .= ' AND arc.typeid IN ('.GetSonIds($cid).')';明显只可能在GetSonIds这个函数里出错,再不断搜索,发现该函数在channelunit.helper.php里,具体代码如下

function GetSonIds($id,$channel=0,$addthis=true)

{

    global $cfg_Cs;

    $GLOBALS['idArray'] = array();

 

    if( !is_array($cfg_Cs) )

    {

  

         require_once(DEDEDATA."/cache/inc_catalog_base.inc");

    

    }

 

    GetSonIdsLogic($id,$cfg_Cs,$channel,$addthis);

    $rquery = join(',',$GLOBALS['idArray']);

    $rquery = preg_replace("/,$/", '', $rquery); 

    return $rquery;

}


通过echo又可以确定了 require_once(DEDEDATA."/cache/inc_catalog_base.inc"); 这里有问题,打开data/cache目录,发现里面是空的,这才醒悟过来,由于之前迁移网站,顺手把chche删掉了,而且cache没设置user权限,每次更新缓存时都没法自动生成。接下来就简单了,设置cache写入权限,后台更新缓存,再刷新目录,果然可以了。


   byerror  qq302777528