From c8cbc3f3cec0f650d43776e8619a872b50bab650 Mon Sep 17 00:00:00 2001 From: pafnuty Date: Mon, 11 May 2020 19:32:20 +0400 Subject: [PATCH] 1.1.0 --- README.md | 33 +++++- blockprolight.xml | 124 +++++++++++++++++++++ engine/modules/base/blockpro.light.inc.php | 91 ++++----------- 3 files changed, 177 insertions(+), 71 deletions(-) create mode 100644 blockprolight.xml diff --git a/README.md b/README.md index d29d652..efa92b0 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,33 @@ # DLE-BlockProLight -Облегченная версия модуля DLE-BlockPro для замены вывода новостей через shortstory +Облегченная версия модуля DLE-BlockPro для замены вывода новостей через shortstory. +Внимание, модуль работает только для вывода кратких новостей (вместо shortstory.tpl) + +![Release version](https://img.shields.io/github/v/release/dle-modules/DLE-BlockProLight?style=flat-square) +![DLE](https://img.shields.io/badge/DLE-13.x-green.svg?style=flat-square "DLE Version") +![License](https://img.shields.io/github/license/dle-modules/DLE-BlockProLight?style=flat-square) + +## Установка модуля + +1. Установить модуль [DLE-BlockPro](https://github.com/dle-modules/DLE-BlockPro/releases/latest) (требуется для работы). +2. Устанавливаем как обычный плагин, файл **blockpro_light_plugin.zip** содержит всё необходимое для автоматической установки. + +## Использование модуля +Для перевода кратких новостей на вывод через модуль blockpro достаточно прописать в `shortstory.tpl` следующий код: +``` +{blockpro-light} +``` + +Для того, что бы передать дополнительные параметры в модуль, необходимо использовать такой тег: + +``` +{blockpro-light params="param=value¶m1=value1"} +``` +Где **param=value¶m1=value1** - параметры стандартной строки подключения модуля. +Например для отключения кеша и вывода статистики работы модуля в BlockPro используется такая строка подключения: +``` +{include file="engine/modules/base/blockpro.php?nocache=y&showstat=y"} +``` +А тег в BlockProLight будет таким: +``` +{blockpro-light params="nocache=y&showstat=y"} +``` \ No newline at end of file diff --git a/blockprolight.xml b/blockprolight.xml new file mode 100644 index 0000000..76176f0 --- /dev/null +++ b/blockprolight.xml @@ -0,0 +1,124 @@ + + + BlockProLight + Облегченная версия модуля BlockPro. +Предназначен для вывода существующего списка новостей через шаблон модуля вместо стандартных шаблонов. + engine/skins/images/blockpro.png + 1.1.0 + 13 + greater + https://updates.pafnuty.name/check-bplight.php + 0 + BlockPro + 1 + + + + + + + + + + + Release notes | Readme]]> + + + + + + + + + copy_template, "[xf" ) !== false OR stripos( $tpl->copy_template, "[ifxf" ) !== false ) {]]> + copy_template, "{blockpro-light") !== false) { + $blockpro_enabled = true; + + // Сохраняем список новостей как переменную для blockpro + $bpNewsList = $db->super_query($sql_select, true); + + // Проверяем, что что-то есть + $news_found = count($bpNewsList) > 1; + + if ($news_found) { + $arBpParams = []; + $bpParams = ''; + + // Если в теге есть параметры, значит надо их учесть. + // Например `{blockpro-light params="nocache=y&showstat=y"}` + if (preg_match("#{blockpro-light params=['\"](.+?)['\"]#i", $tpl->copy_template, $match)) { + $_bpParams = explode('&', $match[1]); + + foreach ($_bpParams as $bpParam) { + $_param = explode('=', $bpParam); + if ($_param[1]) { + $arBpParams[$_param[0]] = $_param[1]; + } + } + } + + // Если в параметрах нет шаблона, добавим тот, что указан для категории, но из папки blockpro + if (!$arBpParams['template']) { + // Шаблон по умолчанию + $bpTplName = 'shortstory'; + + // Если для категории задан другой шаблон, подставим его + if ($category_id and $cat_info[$category_id]['short_tpl'] != '') { + $bpTplName = $cat_info[$category_id]['short_tpl']; + } + + $arBpParams['template'] = 'blockpro/'.$bpTplName; + } + + $_pbParams = []; + foreach ($arBpParams as $key => $value) { + $_pbParams[] = $key.'='.$value; + } + $bpParams = implode('&', $_pbParams); + + unset($_pbParams); + unset($arBpParams); + + // Строка для загрузки модуля + $bpTplString = 'engine/modules/base/blockpro.light.php?'.$bpParams; + + // Строка для подстановки в шаблон, что бы загрузить модуль через штатные средства DLE + $tplIncludeString = '{include file="'.$bpTplString.'"}'; + + // Делаем одинаковыми переменные copy_template и template для того, что бы DLE не отстрелил `Filtered` + $tpl->copy_template = $tpl->template = $tplIncludeString; + + // Массив, который будем передавать + $tplArr = ['', $bpTplString]; + // Установим корректный include_mode + $tpl->include_mode = 'php'; + + // load_file вернёт уже скомпиленный код, поэтому можно сразу закинуть его в result + $tpl->result['content'] = $tpl->load_file($tplArr); + } + + } + + if (!$blockpro_enabled) { + // DLE-BlockproLight end]]> + + + clear();]]> + + 1 + 1 + + + \ No newline at end of file diff --git a/engine/modules/base/blockpro.light.inc.php b/engine/modules/base/blockpro.light.inc.php index fefef52..fab3ded 100644 --- a/engine/modules/base/blockpro.light.inc.php +++ b/engine/modules/base/blockpro.light.inc.php @@ -24,8 +24,7 @@ /** @var bool $showstat */ if ($showstat) { - $start = microtime(true); - $dbStat = ''; + $start = microtime(true); } /** * Конфиг модуля @@ -74,7 +73,6 @@ } - // Поддержка модуля multiLang $multiLangEnabled = false; // По умолчанию язык пустой @@ -128,36 +126,9 @@ $cfg['cachePrefix'] = 'base'; } -// Определяемся с правильным шаблоном сайта +// Определяемся с правильным шаблоном сайта (для этого модуля он всегда равен текущему `$config['skin']`) $currentSiteSkin = $config['skin']; -if($isAjaxConfig) { - if ($_REQUEST['skin']) { - echo '
skin: ';
-        print_r($_REQUEST['skin']);
-        echo '
'; - $_REQUEST['skin'] = $_REQUEST['dle_skin'] = trim(totranslit($_REQUEST['skin'], false, false)); - } - - if ($_REQUEST['dle_skin']) { - echo '
dle_skin: ';
-        print_r($_REQUEST['dle_skin']);
-        echo '
'; - $_REQUEST['dle_skin'] = trim(totranslit($_REQUEST['dle_skin'], false, false)); - if ($_REQUEST['dle_skin'] AND @is_dir(ROOT_DIR.'/templates/'.$_REQUEST['dle_skin'])) { - $currentSiteSkin = $_REQUEST['dle_skin']; - } - } elseif ($_COOKIE['dle_skin']) { - echo '
kookies: ';
-        print_r($_COOKIE['dle_skin']);
-        echo '
'; - $_COOKIE['dle_skin'] = trim(totranslit((string)$_COOKIE['dle_skin'], false, false)); - if ($_COOKIE['dle_skin'] AND is_dir(ROOT_DIR.'/templates/'.$_COOKIE['dle_skin'])) { - $currentSiteSkin = $_COOKIE['dle_skin']; - } - } -} - // Формируем имя кеша $cacheName = implode('_', $cfg).$currentSiteSkin; @@ -377,7 +348,7 @@ // Результат обработки шаблона try { - $output = $base->tpl->fetch($currentSiteSkin . '/' . $base->cfg['template'].'.tpl', $tplArr); + $output = $base->tpl->fetch($base->dle_config['skin'].'/'.$base->cfg['template'].'.tpl', $tplArr); } catch (Exception $e) { $outputLog['errors'][] = $e->getMessage(); $base->cfg['nocache'] = true; @@ -388,22 +359,6 @@ $base->cfg['nocache'] = true; } - // Формируем данные о запросах для статистики, если требуется - if ($base->cfg['showstat'] && $user_group[$member_id['user_group']]['allow_all_edit']) { - $statQ = []; - - foreach ($stat as $i => $q) { - $statQ['q'] .= '
'.'['.($i + 1).'] '.$q['query'].'
['.($i + 1).' время:] '.$q['timer'] - .''; - $statQ['t'] += $q['timer']; - } - if (isset($statQ['q'])) { - $dbStat = 'Запрос(ы): '.$statQ['q'].'
Время выполнения запросов: '.$statQ['t'].'
'; - } - - unset($stat); - } - // Создаём кеш, если требуется if (!$base->cfg['nocache']) { create_cache($base->cfg['cachePrefix'], $output, $cacheName, $cacheSuffix); @@ -430,27 +385,24 @@ } // Результат работы модуля -/** @var boolean $external */ -if (!$external) { - // Если блок не является внешним - выводим на печать - if (count($outputLog['errors']) > 0) { - // Выводим ошибки, если они есть - $outputErrors = []; - $outputErrors[] - = ''; +// Если блок не является внешним - выводим на печать +if (count($outputLog['errors']) > 0) { + // Выводим ошибки, если они есть + $outputErrors = []; + $outputErrors[] + = ''; - $outputErrors = implode('', $outputErrors); + $outputErrors = implode('', $outputErrors); - echo $outputErrors; - } else { - // Если нет ошибок - выводим результат аботы модуля - echo $output; - } + echo $outputErrors; +} else { + // Если нет ошибок - выводим результат аботы модуля + echo $output; } // Показываем стстаистику выполнения скрипта, если требуется @@ -461,7 +413,6 @@ / (1024 * 1024), 2).'Мб ' : ''; // Вывод статистики /** @var integer $start */ - /** @var string $dbStat */ - echo '
'.$dbStat - .'Время выполнения скрипта: '.round((microtime(true) - $start), 6).' c.'.$mem_usg.'
'; + echo '
Время выполнения скрипта: ' + .round((microtime(true) - $start), 6).' c.'.$mem_usg.'
'; }