Prestashop, не может требовать класс модуля
Проблема
Связанная проблема, я пытался применить соответствующее решение к своему проекту, однако я не могу выполнить
Module::getInstanceByName('modulename');
У меня даже нет доступа к классу Module
, что затрудняет мне доступ к контексту приложения и контексту моего собственного модуля
class_exists('Module')
Возвращает false
.
Я также предоставляю структуру каталогов моего модуля, из которого я пытаюсь получить доступ Module
.
├── mymodule.php
├── config.xml
└── somedirectory
└── index.php
Где mymodule.php
следует за модулем класс рекомендации и index.php
- это просто php-файл, в котором я пытаюсь получить доступ к другим модулям. самое важное для меня - получить доступ к контексту моего собственного модуля, чтобы я мог получить, например, его версию и другие настройки.
Пример источника
Пример index.php
из моего testmodule
, этот пример предназначен для 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";
}
Он выводит class does not exists
.
Причина, по которой мне требуется ../../../config/settings.inc.php
, состоит в том, чтобы продемонстрировать, что есть некоторые классы, которые мне могут потребоваться, и это работает. Я могу получить доступ к константам, определенным внутри settings.inc.php
Таким образом, файл по относительному пути ../../../classes/Module.php
существует и содержит
...
public static function getInstanceByName($moduleName)
...
Вопросы
- Как правильно получить доступ к классу
Module
для доступа к экземпляру конкретного модуля, как предложено здесь. Как правильно загружать классы Prestashop из произвольного файла в пользовательский модуль. - Почему я могу импортировать
../../../config/settings.inc.php
с помощьюrequire
, и это не относится к../../../classes/Module.php
? - Эта проблема касается Prestashop
1.4
, однако я хотел бы знать, может ли это быть применено также к1.5
и1.6
, я заметил, что для этих версийclasses/module.php
не существует, вместо этого естьclasses/module/Module.php
. Общее решение было бы лучшим.
1 answers
Если вы вызываете свой файл index.php
напрямую (http://www.example.com/modules/mymodule/somedirectory/index.php
), вы не используете внутренний диспетчер Prestashop. Это означает, что Prestashop не загружается при выполнении вашего скрипта index.php
.
Если вы хотите загрузить Prestashop, вам сначала нужно включить /config/config.inc.php
:
require('../../../config/config.inc.php');
if (class_exists('Module')) {
echo "class exists";
} else {
echo "class does not exists";
}
Если вы хотите использовать стандартный процесс диспетчеризации Prestashop, вам придется создать Модульный фронтконтроллер.