• SanDev.pro
  • Блог
  • Обновился до DLE 13 и перестал работать модуль, как починить?
Обновился до DLE 13 и перестал работать модуль, как починить? для DLE

Обновился до DLE 13 и перестал работать модуль, как починить?

Обновился до DLE 13 и перестал работать модуль, как починить?

В 13ой версии Datalife Engine была добавлена система управления плагинами, которая, если кратко, позволяет вносить изменения в файлы без фактического внесения этих самых изменений в файлы движка. Вот именно из-за появления этой системы управления плагинами и могут возникнуть проблемы в работе некоторых модулей.
Первой "жертвой" нововведения стал мой модуль Стол заказов

В комментариях человек привел код ошибки, который мы сейчас разберем.
Fatal error: Uncaught Error: Class 'DLEPlugins' not found in {путь к домену}\engine\classes\templates.class.php:24
Stack trace:
#0 {путь к домену}\engine\mods\orderdesc\lic_71.php(6): require_once()
#1 {путь к домену}\engine\mods\orderdesc\ajax.php(46): include_once('{путь к файлу}')
#2 {main}
  thrown in {путь к домену}\engine\classes\templates.class.php on line 24


Проведем краткий ликбез и разберем первую строку, что в ней говорится:
Fatal error: Uncaught Error: Class 'DLEPlugins' not found in {путь к домену}\engine\classes\templates.class.php:24

Тут мы видим критическую ошибку, которая сообщает о том, что используется не объявленный класс DLEPlugins, а конкретно используется в файле engine\classes\templates.class.php в 24й строке.
Ниже идет путь вызова файла (данный текст будет отображаться только на PHP 7.x).
Он позволяет разработчику отследить путь вызова файлов и выяснить где возникла проблема.

К примеру на php 5.6 данная ошибка будет выглядеть примерно так:
Fatal error: Class 'DLEPlugins' not found in {путь к домену}\engine\classes\templates.class.php on line 24


В целом уже все ясно, но для наглядности смотрим 24ю строку файла templates.class.php
require_once (DLEPlugins::Check(ROOT_DIR . '/engine/classes/mobiledetect.class.php'));

Вот как раз тот вызов неизвестного класса, который выбрасывает нам критическую ошибку.

Подобная ошибка будет появляться только в AJAX обработчике.
Ошибка возникает потому, что в файле использует класс DLEPlugins, который, в свою очередь, просто не подключен.

Если мы откроем файл engine/ajax/controller.php, то в самую первую очередь увидим подключение файла:
require_once (ENGINE_DIR . '/classes/plugins.class.php');


Поэтому чтобы наш модуль заработал - достаточно просто подключить этот файл в файле модуля.
За одним маленьким исключением, вместо require_once следует использовать include_once для совместимости с предыдущими версиями DLE:
include_once ENGINE_DIR . '/classes/plugins.class.php';


На вопрос - где именно вставлять эту строку, ответ достаточно прост.
Нужно найти первое подключение любого файла и перед ним вставить вышеуказанную строку.
Строка подключения файла может начинаться на одну из ниже перечисленных функций:
include
include_once
require
require_once


Обычно это будет строка:
include ENGINE_DIR . '/data/config.php';


На этом пока, пожалуй, все :)

С уважением,
Олег Александрович a.k.a. Sander
Комментарии: (4)
  1. foto
    VIP 16 мая 2018 21:56 #
    Sander, решение применимо ко всем модулям (которые допустим работали на 12-й версии)?
    0
    1. foto
      Администратор 16 мая 2018 21:58 #
      Да, но это решение только для вышеуказанной ошибки.
      Главное чтобы файл подключался вне каких-либо обработчиков, функций или условий.
      0
  2. foto
    Гость 21 мая 2018 07:40 #
    А где логи ошибок работы плагинов читать?
    Был свой кастомный код, рабочий на 12.1, после перехода на 13.0 перестал работать, и даже создание плагина не помогает - не работает( Вот думал где бы логи глянуть...
    0
    1. foto
      Администратор Вчера, 12:13 #
      Лог плагинов выдаст ошибку только если будут проблемы при установке:
      - нет файла
      - нет искомой строки
      - ошибка в запросе mysql


      Во всех других случаях необходимо выполнять анализ и поиск ошибок самостоятельно.
      Плагины - не панацея от неисправного кода.
      0
Добавить комментарий
  • Логин
  • E-mail (не обязательно)
Повторите рисунок:
antibot
© Sander-Development. 2009-2018.
При копировании, ссылка на источник обязательна.