• 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';


Для разработчиков предлагаю готовый вариант лоадера для модулей:
https://github.com/San-Dev/DLE-plugins-loader/

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

С уважением,
Олег Александрович a.k.a. Sander
Комментарии: (12)
  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
      Администратор 22 мая 2018 12:13 #
      Лог плагинов выдаст ошибку только если будут проблемы при установке:
      - нет файла
      - нет искомой строки
      - ошибка в запросе mysql


      Во всех других случаях необходимо выполнять анализ и поиск ошибок самостоятельно.
      Плагины - не панацея от неисправного кода.
      0
  3. foto
    Гость 3 июня 2018 17:11 #
    Может кто то поможет:

    Есть модуль на замену ссылок в dle ( когда клацаешь на ссылку то файл не скачиваеться, а переходит на отдельную страничку скачки с рекламой ) На новой версии dle 13.0 не работает. Скорее всего не работает это:

    По инструкции к моду нужно заменить в engine/modules/functions.php

    $config['http_home_url']."engine/download.php?id=".$row['id'].$area

    на
    ($dp_conf['status']) ? $config['http_home_url'] . "download/".$row['id'] . $area : $config['http_home_url'] . "engine/download.php?id=".$row['id'] . $area

    Но вместо
    $config['http_home_url']."engine/download.php?id=".$row['id'].$area
    в новой версии не существует
    0
    1. foto
      Гость 3 июня 2018 17:16 #
      Цитата: Oleh
      include_once ENGINE_DIR . '/classes/plugins.class.php';

      не актуально
      +1
    2. foto
      Администратор 4 июня 2018 20:49 #
      Я пока не готов вам помочь в этом вопросе.
      Нужно устанавливать, тестировать...

      Могу разве что подсказать, что в 13.0 эта строка выглядит так:
      $tpl->set( '{link}', $config['http_home_url']."index.php?do=download&id=".$row['id'].$area_link );
      0
  4. foto
    Посетитель 28 октября 2018 15:27 #
    У меня похожая ошибка, только с модулем поиска торрентов.
    Fatal error: Class 'DLEPlugins' not found in /var/www/xxxx/data/www/xxx.ru/engine/inc/include/init.php on line 25

    Itit.php 25 строка
    require_once (DLEPlugins::Check(ENGINE_DIR . '/inc/include/functions.inc.php'));

    Не могу понять что править
    0
  5. foto
    Гость 12 декабря 2018 09:41 #
    Спасибо, помогло
    0
  6. foto
    Гость 9 октября 2019 21:24 #
    Огромное спасибо, долго голову ломал и Ваш совет в раз восстановил работу моего модуля)
    0
  7. foto
    Посетитель 10 января 2020 15:53 #
    Здраствуйте Sander !
    После установки предпросмотра комментария вышла такая ошибка:
    Fatal error: Uncaught Error: Class 'DLEPlugins' not found in /home/multipul/uhoplan.ru/engine/classes/parse.class.php:22 Stack trace: #0 /home/multipul/uhoplan.ru/engine/ajax/commview.php(46): require_once() #1 {main} thrown in /home/multipul/uhoplan.ru/engine/classes/parse.class.php on line 22

    Подскажите пожалуйста как исправить?
    0
  8. foto
    Гость 24 марта 2022 08:00 #
    Здравствуйте!
    После обновления движка до 15.0 на яндекс.карте (сама карта выводится) не открываются точки и выдает - Fatal error: Class 'Mobile_Detect' not found in /home/freeperc/public_html/xn----7sbamlsajl4ac0bgi.xn--p1ai/engine/classes/templates.class.php on line 53

    Можете подсказать как исправить?
    0
Добавить комментарий

Внимание! Все сообщения касающиеся техподдержки будут удалены или проигнорированы

Attention! All messages asking for technical support will be removed or ignored

  • Логин
  • E-mail (не обязательно)
Повторите рисунок:
antibot
© Sander-Development. 2009-2024.
При копировании, ссылка на источник обязательна.