Prestashop,不能要求Module类

时间:2016-07-11 09:52:31

标签: php module prestashop autoload

问题

相关issue,我一直在尝试将相关解决方案应用到我的项目中,但是我无法执行

Module::getInstanceByName('modulename');

我甚至无法访问Module类,这使我很难访问应用程序上下文和我自己的模块上下文

class_exists('Module')

返回false

我还提供了模块的目录结构,我试图从中访问Module

├── mymodule.php
├── config.xml
└── somedirectory
    └── index.php

mymodule.php跟随模块类guidelines,而index.php只是php文件,我试图访问其他模块。对我来说最重要的是访问我自己的模块的上下文,以便我可以检索它的版本和其他设置。

示例来源

我的index.php testmodule的示例,此示例适用于1.4,但我也愿意让它适用于1.51.6

require('../../../config/settings.inc.php');
require('../../../classes/Module.php');
$instance = Module::getInstanceByName('mymodule');

这会崩溃,当我使用

require('../../../config/settings.inc.php');
require('../../../classes/Module.php');
if (class_exists('Module')) {
    echo "class exists";
} else {
    echo "class does not exists";
}

输出class does not exists

我需要../../../config/settings.inc.php的原因是为了证明我可以要求一些类并且它有效。我能够访问settings.inc.php

中定义的常量

因此相对路径../../../classes/Module.php的文件存在且包含

...
public static function getInstanceByName($moduleName)
...

问题

  1. 如何正确访问Module类以按照建议here访问特定模块的实例。从自定义模块中的任意文件中加载Prestashop类的正确方法是什么。
  2. 为什么我可以使用../../../config/settings.inc.php导入require并且它不适用于../../../classes/Module.php
  3. 此问题与Prestashop 1.4有关,但我想知道是否也适用于1.51.6,我注意到对于那些版本classes/module.php不存在而是存在classes/module/Module.php。一般的解决方案将是最好的。

1 个答案:

答案 0 :(得分:2)

如果您直接致电http://www.example.com/modules/mymodule/somedirectory/index.php文件(index.php),则表示您未使用Prestashop内部调度程序。这意味着在执行/config/config.inc.php脚本时未加载Prestashop。

如果您想加载Prestashop,首先需要加入require('../../../config/config.inc.php'); if (class_exists('Module')) { echo "class exists"; } else { echo "class does not exists"; }

<VirtualHost>

如果您想使用Prestashop标准Dispatcher流程,则必须创建ModuleFrontController