问题
相关issue ,我一直在尝试将相关解决方案应用到我的项目中,但是我无法执行
Module::getInstanceByName('modulename');
我什至无法访问 Module
类,这让我很难访问应用程序上下文和我自己的模块上下文
class_exists('Module')
返回 false
。
我还提供了我试图从中访问 Module
的模块的目录结构。
├── mymodule.php
├── config.xml
└── somedirectory
└── index.php
mymodule.php
跟在模块类 guidelines 之后index.php
只是我尝试访问其他模块的 php 文件。对我来说最重要的是访问我自己的模块的上下文,这样我就可以检索它的版本和其他设置。
例子来源
我的 testmodule
中的 index.php
示例,此示例适用于 1.4
但我也愿意让它为 1.5
和 1.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";
}
它输出类不存在
。
我需要 ../../../config/settings.inc.php
的原因是为了证明我可以需要一些类并且它可以工作。我能够访问 settings.inc.php
因此相对路径../../../classes/Module.php
中的文件存在并且它包含
...
public static function getInstanceByName($moduleName)
...
问题
- 如何按照建议正确访问
Module
类以访问特定模块的实例 here .从自定义模块的任意文件中加载 Prestashop 类的正确方法是什么。 - 为什么我可以使用
require
导入../../../config/settings.inc.php
而它不适用于。 ./../../classes/Module.php
? - 这个问题涉及 Prestashop
1.4
,但是我想知道这是否也适用于1.5
和1.6
,我注意到对于那些版本,classes/module.php
不存在,而是存在classes/module/Module.php
。通用解决方案是最好的。
最佳答案
如果你直接调用你的 index.php
文件 (http://www.example.com/modules/mymodule/somedirectory/index.php
) 你是不使用 Prestashop 内部调度程序。这意味着当您的 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 .
关于php - Prestashop,不能要求模块类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38303955/