Актуальный релиз „DataLife Engine 19.1 Final“ buildid 108

подробнее о релизе

Главная страница / DataLife Engine / Скрипты и другая информация / Обновления модулей для версий DLE 19.0 и выше

Обновления модулей для версий DLE 19.0 и выше

27 марта 2026 | 16:41 | Пятница
23
1
[ Рейтинг: 0 / Голосов: 0 ]
Обновления модулей для версий DLE 19.0 и выше

Многие знают, что версия DLE 19.0 принесла много сюрпризов, и все плагины и модули, которые каким-то образом связаны с админкой или с обработкой доп полей, нужно переписывать. Изменений на самом деле не так много, но постоянно при обновлении приходится выискивать какие правки нужно делать в файлах. Решил собрать основные изменения, которые нужно делать для обновления кода, чтобы привезти его в рабочее состояние.

Обновление AJAX запросов модулям

Строки вида 

fetch(dle_root + "engine/ajax/controller.php?mod=file.php")

заменить на 

dle_root + "index.php?controller=ajax&mod=.."

Новая обработка xfieldsload

$xfields = xfieldsload();
$row['xfields'] = xfieldsdataload($row['xfields']);

заменить на 

$xfields = DLEXFields::xfieldsdataload($row['xfields']);

Либо можно использовать примерную функцию обработки доп полей, с поддержкой как старых версий DLE, так и новых:

function rate_update_load_xfields() {
	$out = array();

	// Используем современный метод DLEXFields
	if( file_exists( ENGINE_DIR . '/classes/xfields.class.php' ) ) {
		include_once ENGINE_DIR . '/classes/xfields.class.php';
		if( class_exists( 'DLEXFields' ) ) {
			DLEXFields::Init();
			if( isset( DLEXFields::$fields['fields'] ) AND is_array( DLEXFields::$fields['fields'] ) ) {
				foreach( DLEXFields::$fields['fields'] as $name => $value ) {
					$title = isset( $value['description'] ) ? trim( (string)$value['description'] ) : '';
					if( $title === '' ) $title = $name;
					$out[$name] = $title;
				}
			}
		}
	}

	// Fallback для старых версий DLE
	if( !count( $out ) ) {
		$legacy_path = ENGINE_DIR . '/data/xfields.txt';
		if( file_exists( $legacy_path ) ) {
			$legacy_rows = @file( $legacy_path );
			if( is_array( $legacy_rows ) ) {
				foreach( $legacy_rows as $legacy_row ) {
					$legacy_row = trim( $legacy_row, "\t\n\r\0\x0B" );
					if( $legacy_row === '' ) continue;

					$legacy_parts = explode( '|', $legacy_row );
					if( !isset( $legacy_parts[0] ) ) continue;

					$name = str_replace( "|", "|", $legacy_parts[0] );
					$name = html_entity_decode( $name, ENT_QUOTES, 'UTF-8' );
					$name = trim( $name );
					if( $name === '' ) continue;

					$title = isset( $legacy_parts[1] ) ? $legacy_parts[1] : '';
					$title = str_replace( "|", "|", $title );
					$title = str_replace( "__NEWL__", "\n", $title );
					$title = html_entity_decode( $title, ENT_QUOTES, 'UTF-8' );
					$title = trim( $title );
					if( $title === '' ) $title = $name;

					$out[$name] = $title;
				}
			}
		}
	}

	return $out;
}

в коде вместо xfieldsload () использовать:

$xfields = rate_update_load_xfields();

Замена путей статическим файлам на папку public

Сюда относятся все статические файлы: изображения, скрипты JS, файлы стилей CSS, шрифты, которые раньше располагались в в папке engine. Начиная с версии DLE все данные файлы перенесены в папку public в корне сайта. Названия файлов остались неизменными, поменялись только пути к ним. Например, для модуля DLE Search, и многих модулей от lazydev нужно делать примерно следущую замену (главное найти нужные файлы, куда нужно внести данные правки):

        <link href="engine/skins/fonts/fontawesome/styles.min.css" rel="stylesheet" type="text/css">
        <link href="engine/skins/stylesheets/application.css" rel="stylesheet" type="text/css">
        <link href="engine/lazydev/{$modLName}/admin/template/assets/charts.css" rel="stylesheet" type="text/css">
        <link href="engine/lazydev/{$modLName}/admin/template/assets/style.css?v12" rel="stylesheet" type="text/css">
        <script src="engine/skins/javascripts/application.js"></script>
        <script src="engine/lazydev/{$modLName}/admin/template/assets/d3.v3.min.js"></script>
        <script src="engine/lazydev/{$modLName}/admin/template/assets/c3.min.js"></script>

заменить на

        <link href="public/fonts/fontawesome/styles.min.css" rel="stylesheet" type="text/css">
        <link href="public/adminpanel/stylesheets/application.css" rel="stylesheet" type="text/css">
        <link href="public/mods/dle_search/charts.css" rel="stylesheet" type="text/css">
        <link href="public/mods/dle_search/style.css?v12" rel="stylesheet" type="text/css">
		<script src="public/js/jquery3.js"></script>
		<script src="public/js/jqueryui.js" defer></script>
        <script src="public/adminpanel/javascripts/application.js"></script>
        <script src="public/mods/dle_search/d3.v3.min.js"></script>
        <script src="public/mods/dle_search/c3.min.js"></script>

Так же, если в модуле используются собственные js/css файлы, их так же рекомендуется перенести в папку public. Я для этого обычно создаю папку public/mods, и в неё складываю все нужные файлы от разных модулей, чтобы они все находились в одной папке и не устраивали неразбериху в структуре файлов и папок на сайте.

htaccess файл в папке с модулем, если при обращении к нему сервер дает ошибку 403

Некоторые модули при обращении в файлам могут вызывать ошибку 403 при обращении к файлам. В этом случае часто помогает создание файла htaccess в папке с файлом с примерным содержимым:

<FilesMatch "^(file1|file2|file3)\.php$">
   <IfModule mod_authz_core.c>
       Require all granted
   </IfModule>
   <IfModule !mod_authz_core.c>
      Order deny,allow
      Allow from all
   </IfModule>
</FilesMatch>

file1|file2|file3 — перечисляем все нужные для работы файлы из нужной папки модуля.


Это пожалуй основные правки, которые требуется сделать для возобновления работы модулей на DLE 19.0 и выше. Если вспомнится ещё какие-то пункты — добавлю их в данный пост.

Комментарии:
ℹ️
 

  1. kaster1980 31 минуту назад
    kaster1980

    Очень полезная статья, огромное спасибо за информацию!

Модули для создания киносайта и не только на базе DataLife Engine, и многое другое...
Просто блог Евгения Попова, он же - byroot © 2015-2026 | Карта сайта