Обновления модулей для версий 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 и выше. Если вспомнится ещё какие-то пункты — добавлю их в данный пост.