解决织梦后台模块管理中心不显示模块列表

2017-04-13 14:27:29 dedecms

1、配置 php.ini 显示错误信息

display_errors = On

2、配置

织梦

/include/common.inc.php 显示错误信息

error_reporting(E_ALL);

// error_reporting(E_ALL || ~E_NOTICE);

再次点击“模块管理”时,出现如下警告信息:

Warning: array_merge(): Argument #2 is not an arrayin D:\xampp\htdocs\dedecms_test\dede\module_main.php on line 95

它说我的第二个参数不是数组?

当我们把鼠标悬停在“模块管理”时,可以看到它调用的文件是 /dede/module_main.php 文件,我们打开编辑此文件。  

直接跳到 95 行,代码如下:

if($action=='')

{

    $types= array('soft'=>'模块','templets'=>'模板','plus'=>'小插件','patch'=>'补丁');

    $dm= newDedeModule($mdir);

    if(empty($moduletype)) $moduletype= '';

    $modules_remote= $dm->GetModuleUrlList($moduletype,$mdurl);

    $modules= array();

    $modules= $dm->GetModuleList($moduletype);

    is_array($modules) || $modules= array();

    $modules= array_merge($modules,$modules_remote);

    require_once(dirname(__FILE__)."/templets/module_main.htm");

    $dm->Clear();

    exit();

}

警告信息提示我们:modules_remote 不是一个数组,为此我们将它手工调成数组试试。在:

$modules = array_merge($modules,$modules_remote);

上面添加:

is_array($modules_remote) || $modules_remote= array();

最终代码:

if($action=='')

{

    $types= array('soft'=>'模块','templets'=>'模板','plus'=>'小插件','patch'=>'补丁');

    $dm= newDedeModule($mdir);

    if(empty($moduletype)) $moduletype= '';

    $modules_remote= $dm->GetModuleUrlList($moduletype,$mdurl);

    $modules= array();

    $modules= $dm->GetModuleList($moduletype);

    is_array($modules) || $modules= array();

    is_array($modules_remote) || $modules_remote= array();

    $modules= array_merge($modules,$modules_remote);

    require_once(dirname(__FILE__)."/templets/module_main.htm");

    $dm->Clear();

    exit();

}

保存修改,再点击后台的“模块管理”发现列表出来了,问题算是解决了。我们来看看点击模块管理过后的列表:  

列表确实出来了,但是我们未安装的插件并没有显示在这里,比如:手机 WAP 浏览模块、UCenter 模块、问答模块等。

在这个 php 文件的顶部,我们看到有这样一句话:

$mdurl= $updateHost.'dedecms/module_'.$cfg_soft_lang.'/modulelist.txt';

它最终生成的结果是:http://updatenew.dedecms.com/base-v57/dedecms/module_utf-8 /modulelist.txt,这个链接打开超级慢,有可能是织梦

服务器

问题导致连接超时不能读取文件。我们打开它发现是一个类似 JSON 的  KEY-VALUE 形式,内容如下:

a:15:{s:32:"0a7bea5dbe571d35def883cbec796437";a:14:{s:3:"url";s:22:......(略)

这是什么?这有点像织梦的云接口,包含了所有的插件,点击织梦之后会自动的去下载这个文件,并保存在  /data/module/moduleurllist.txt  中,如果服务器禁止了访问服务器之外的网络或请求超时,那么该文件就不能正常被读取,这也解释了之前我们打开模块管理后会加载很长时间(最终读取超时), 最后显示空列表的情况。

最终解决办法:

1、打开 http://updatenew.dedecms.com/base-v57/dedecms/,根据网站编码进入文件夹,保存里面的 modulelist.txt 文件到本地。

2、把新下载 modulelist.txt 改名为 moduleurllist.txt 并替换 /data/module/moduleurllist.txt