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)
...

Вопросы

  1. Как правильно получить доступ к классу Module для доступа к экземпляру конкретного модуля, как предложено здесь. Как правильно загружать классы Prestashop из произвольного файла в пользовательский модуль.
  2. Почему я могу импортировать ../../../config/settings.inc.php с помощью require, и это не относится к ../../../classes/Module.php?
  3. Эта проблема касается Prestashop 1.4, однако я хотел бы знать, может ли это быть применено также к 1.5 и 1.6, я заметил, что для этих версий classes/module.php не существует, вместо этого есть classes/module/Module.php. Общее решение было бы лучшим.
Author: Community, 2016-07-11

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, вам придется создать Модульный фронтконтроллер.

 2
Author: Florian Lemaitre, 2016-07-11 13:32:12