Skip to content

Commit

Permalink
1.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
pafnuty committed May 11, 2020
1 parent 054490d commit c8cbc3f
Show file tree
Hide file tree
Showing 3 changed files with 177 additions and 71 deletions.
33 changes: 32 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -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&param1=value1"}
```
Где **param=value&param1=value1** - параметры стандартной строки подключения модуля.
Например для отключения кеша и вывода статистики работы модуля в BlockPro используется такая строка подключения:
```
{include file="engine/modules/base/blockpro.php?nocache=y&showstat=y"}
```
А тег в BlockProLight будет таким:
```
{blockpro-light params="nocache=y&showstat=y"}
```
124 changes: 124 additions & 0 deletions blockprolight.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
<name>BlockProLight</name>
<description>Облегченная версия модуля BlockPro.
Предназначен для вывода существующего списка новостей через шаблон модуля вместо стандартных шаблонов.</description>
<icon>engine/skins/images/blockpro.png</icon>
<version>1.1.0</version>
<dleversion>13</dleversion>
<versioncompare>greater</versioncompare>
<upgradeurl>https://updates.pafnuty.name/check-bplight.php</upgradeurl>
<filedelete>0</filedelete>
<needplugin>BlockPro</needplugin>
<mnotice>1</mnotice>
<mysqlinstall><![CDATA[]]></mysqlinstall>
<mysqlupgrade><![CDATA[]]></mysqlupgrade>
<mysqlenable><![CDATA[]]></mysqlenable>
<mysqldisable><![CDATA[]]></mysqldisable>
<mysqldelete><![CDATA[]]></mysqldelete>
<phpinstall><![CDATA[]]></phpinstall>
<phpupgrade><![CDATA[]]></phpupgrade>
<phpenable><![CDATA[]]></phpenable>
<phpdisable><![CDATA[]]></phpdisable>
<phpdelete><![CDATA[]]></phpdelete>
<notice><![CDATA[<a href="https://github.com/dle-modules/DLE-BlockProLight/releases/latest" target="_blank">Release notes</a> | <a href="https://github.com/dle-modules/DLE-BlockProLight/blob/master/README.md" target="_blank">Readme</a>]]></notice>
<file name="engine/engine.php">
<operation action="after">
<searchcode><![CDATA[$short_news_cache = false;]]></searchcode>
<replacecode><![CDATA[// DLE-BlockProLight start
$bpNewsList = [];
// DLE-BlockProLight end]]></replacecode>
</operation>
</file>
<file name="engine/modules/show.short.php">
<operation action="before">
<searchcode><![CDATA[if( stripos( $tpl->copy_template, "[xf" ) !== false OR stripos( $tpl->copy_template, "[ifxf" ) !== false ) {]]></searchcode>
<replacecode><![CDATA[// DLE-BlockproLight start
// По умолчанию вывод через модуль отключен.
$blockpro_enabled = false;
// Пустой массив для новостей blockpro
$bpNewsList = [];
// Если в шаблоне есть тег {blockpro-light} - значит нужно включить модуль.
if (stripos($tpl->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]]></replacecode>
</operation>
<operation action="before">
<searchcode><![CDATA[$tpl->clear();]]></searchcode>
<replacecode><![CDATA[// DLE-BlockproLight start
// Закрывающая скобка для условия `if (!$blockpro_enabled) {` разсположенного выше по коду
}
// DLE-BlockproLight end]]></replacecode>
<searchcount>1</searchcount>
<replacecount>1</replacecount>
</operation>
</file>
</dleplugin>
91 changes: 21 additions & 70 deletions engine/modules/base/blockpro.light.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@

/** @var bool $showstat */
if ($showstat) {
$start = microtime(true);
$dbStat = '';
$start = microtime(true);
}
/**
* Конфиг модуля
Expand Down Expand Up @@ -74,7 +73,6 @@
}



// Поддержка модуля multiLang
$multiLangEnabled = false;
// По умолчанию язык пустой
Expand Down Expand Up @@ -128,36 +126,9 @@
$cfg['cachePrefix'] = 'base';
}

// Определяемся с правильным шаблоном сайта
// Определяемся с правильным шаблоном сайта (для этого модуля он всегда равен текущему `$config['skin']`)
$currentSiteSkin = $config['skin'];

if($isAjaxConfig) {
if ($_REQUEST['skin']) {
echo '<pre class="dle-pre">skin: ';
print_r($_REQUEST['skin']);
echo '</pre>';
$_REQUEST['skin'] = $_REQUEST['dle_skin'] = trim(totranslit($_REQUEST['skin'], false, false));
}

if ($_REQUEST['dle_skin']) {
echo '<pre class="dle-pre">dle_skin: ';
print_r($_REQUEST['dle_skin']);
echo '</pre>';
$_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 '<pre class="dle-pre">kookies: ';
print_r($_COOKIE['dle_skin']);
echo '</pre>';
$_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;

Expand Down Expand Up @@ -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;
Expand All @@ -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'] .= '<br>'.'<b>['.($i + 1).']</b> '.$q['query'].' <br>['.($i + 1).' время:] <b>'.$q['timer']
.'</b>';
$statQ['t'] += $q['timer'];
}
if (isset($statQ['q'])) {
$dbStat = 'Запрос(ы): '.$statQ['q'].'<br>Время выполнения запросов: <b>'.$statQ['t'].'</b><br>';
}

unset($stat);
}

// Создаём кеш, если требуется
if (!$base->cfg['nocache']) {
create_cache($base->cfg['cachePrefix'], $output, $cacheName, $cacheSuffix);
Expand All @@ -430,27 +385,24 @@
}

// Результат работы модуля
/** @var boolean $external */
if (!$external) {
// Если блок не является внешним - выводим на печать
if (count($outputLog['errors']) > 0) {
// Выводим ошибки, если они есть
$outputErrors = [];
$outputErrors[]
= '<ul class="bp-errors" style="border: solid 1px red; padding: 5px; margin: 5px 0; list-style: none; background: rgba(255,0,0,0.2)">';

foreach ($outputLog['errors'] as $errorText) {
$outputErrors[] = '<li>'.$errorText.'</li>';
}
$outputErrors[] = '</ul>';
// Если блок не является внешним - выводим на печать
if (count($outputLog['errors']) > 0) {
// Выводим ошибки, если они есть
$outputErrors = [];
$outputErrors[]
= '<ul class="bp-errors" style="border: solid 1px red; padding: 5px; margin: 5px 0; list-style: none; background: rgba(255,0,0,0.2)">';

foreach ($outputLog['errors'] as $errorText) {
$outputErrors[] = '<li>'.$errorText.'</li>';
}
$outputErrors[] = '</ul>';

$outputErrors = implode('', $outputErrors);
$outputErrors = implode('', $outputErrors);

echo $outputErrors;
} else {
// Если нет ошибок - выводим результат аботы модуля
echo $output;
}
echo $outputErrors;
} else {
// Если нет ошибок - выводим результат аботы модуля
echo $output;
}

// Показываем стстаистику выполнения скрипта, если требуется
Expand All @@ -461,7 +413,6 @@
/ (1024 * 1024), 2).'Мб </b>' : '';
// Вывод статистики
/** @var integer $start */
/** @var string $dbStat */
echo '<div class="bp-statistics" style="border: solid 1px red; padding: 5px; margin: 5px 0;">'.$dbStat
.'Время выполнения скрипта: <b>'.round((microtime(true) - $start), 6).'</b> c.'.$mem_usg.'</div>';
echo '<div class="bp-statistics" style="border: solid 1px red; padding: 5px; margin: 5px 0;">Время выполнения скрипта: <b>'
.round((microtime(true) - $start), 6).'</b> c.'.$mem_usg.'</div>';
}

0 comments on commit c8cbc3f

Please sign in to comment.