解决织梦后台模块管理中心不显示模块列表
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