Prestashop,不能要求模块 class

Prestashop, cannot require Module class

问题

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

Module::getInstanceByName('modulename');

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

class_exists('Module')

Returns false.

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

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

其中 mymodule.php 跟在模块 class guidelines 之后,而 index.php 只是 php 我试图访问其他模块的文件。对我来说最重要的是访问我自己模块的上下文,这样我就可以检索它的版本和其他设置。

示例来源

来自我的 testmoduleindex.php 示例,此示例适用于 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 的原因是为了证明我可以要求一些 classes 并且它有效。我能够访问 settings.inc.php

中定义的常量

所以相对路径 ../../../classes/Module.php 的文件存在并且它包含

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

问题

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

如果您直接调用 index.php 文件 (http://www.example.com/modules/mymodule/somedirectory/index.php),则您没有使用 Prestashop 内部 Dispatcher。这意味着当您的 index.php 脚本执行时,Prestashop 不会加载。

如果你想加载 Prestashop 你首先需要包括 /config/config.inc.php:

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

如果您想使用 Prestashop 标准 Dispatcher 进程,您将必须创建一个 ModuleFrontController