Skip to content

Commit c8cbc3f

Browse files
committed
1.1.0
1 parent 054490d commit c8cbc3f

3 files changed

Lines changed: 177 additions & 71 deletions

File tree

README.md

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,33 @@
11
# DLE-BlockProLight
2-
Облегченная версия модуля DLE-BlockPro для замены вывода новостей через shortstory
2+
Облегченная версия модуля DLE-BlockPro для замены вывода новостей через shortstory.
3+
Внимание, модуль работает только для вывода кратких новостей (вместо shortstory.tpl)
4+
5+
![Release version](https://img.shields.io/github/v/release/dle-modules/DLE-BlockProLight?style=flat-square)
6+
![DLE](https://img.shields.io/badge/DLE-13.x-green.svg?style=flat-square "DLE Version")
7+
![License](https://img.shields.io/github/license/dle-modules/DLE-BlockProLight?style=flat-square)
8+
9+
## Установка модуля
10+
11+
1. Установить модуль [DLE-BlockPro](https://github.com/dle-modules/DLE-BlockPro/releases/latest) (требуется для работы).
12+
2. Устанавливаем как обычный плагин, файл **blockpro_light_plugin.zip** содержит всё необходимое для автоматической установки.
13+
14+
## Использование модуля
15+
Для перевода кратких новостей на вывод через модуль blockpro достаточно прописать в `shortstory.tpl` следующий код:
16+
```
17+
{blockpro-light}
18+
```
19+
20+
Для того, что бы передать дополнительные параметры в модуль, необходимо использовать такой тег:
21+
22+
```
23+
{blockpro-light params="param=value&param1=value1"}
24+
```
25+
Где **param=value&param1=value1** - параметры стандартной строки подключения модуля.
26+
Например для отключения кеша и вывода статистики работы модуля в BlockPro используется такая строка подключения:
27+
```
28+
{include file="engine/modules/base/blockpro.php?nocache=y&showstat=y"}
29+
```
30+
А тег в BlockProLight будет таким:
31+
```
32+
{blockpro-light params="nocache=y&showstat=y"}
33+
```

blockprolight.xml

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<dleplugin>
3+
<name>BlockProLight</name>
4+
<description>Облегченная версия модуля BlockPro.
5+
Предназначен для вывода существующего списка новостей через шаблон модуля вместо стандартных шаблонов.</description>
6+
<icon>engine/skins/images/blockpro.png</icon>
7+
<version>1.1.0</version>
8+
<dleversion>13</dleversion>
9+
<versioncompare>greater</versioncompare>
10+
<upgradeurl>https://updates.pafnuty.name/check-bplight.php</upgradeurl>
11+
<filedelete>0</filedelete>
12+
<needplugin>BlockPro</needplugin>
13+
<mnotice>1</mnotice>
14+
<mysqlinstall><![CDATA[]]></mysqlinstall>
15+
<mysqlupgrade><![CDATA[]]></mysqlupgrade>
16+
<mysqlenable><![CDATA[]]></mysqlenable>
17+
<mysqldisable><![CDATA[]]></mysqldisable>
18+
<mysqldelete><![CDATA[]]></mysqldelete>
19+
<phpinstall><![CDATA[]]></phpinstall>
20+
<phpupgrade><![CDATA[]]></phpupgrade>
21+
<phpenable><![CDATA[]]></phpenable>
22+
<phpdisable><![CDATA[]]></phpdisable>
23+
<phpdelete><![CDATA[]]></phpdelete>
24+
<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>
25+
<file name="engine/engine.php">
26+
<operation action="after">
27+
<searchcode><![CDATA[$short_news_cache = false;]]></searchcode>
28+
<replacecode><![CDATA[// DLE-BlockProLight start
29+
$bpNewsList = [];
30+
// DLE-BlockProLight end]]></replacecode>
31+
</operation>
32+
</file>
33+
<file name="engine/modules/show.short.php">
34+
<operation action="before">
35+
<searchcode><![CDATA[if( stripos( $tpl->copy_template, "[xf" ) !== false OR stripos( $tpl->copy_template, "[ifxf" ) !== false ) {]]></searchcode>
36+
<replacecode><![CDATA[// DLE-BlockproLight start
37+
// По умолчанию вывод через модуль отключен.
38+
$blockpro_enabled = false;
39+
// Пустой массив для новостей blockpro
40+
$bpNewsList = [];
41+
42+
// Если в шаблоне есть тег {blockpro-light} - значит нужно включить модуль.
43+
if (stripos($tpl->copy_template, "{blockpro-light") !== false) {
44+
$blockpro_enabled = true;
45+
46+
// Сохраняем список новостей как переменную для blockpro
47+
$bpNewsList = $db->super_query($sql_select, true);
48+
49+
// Проверяем, что что-то есть
50+
$news_found = count($bpNewsList) > 1;
51+
52+
if ($news_found) {
53+
$arBpParams = [];
54+
$bpParams = '';
55+
56+
// Если в теге есть параметры, значит надо их учесть.
57+
// Например `{blockpro-light params="nocache=y&showstat=y"}`
58+
if (preg_match("#{blockpro-light params=['\"](.+?)['\"]#i", $tpl->copy_template, $match)) {
59+
$_bpParams = explode('&', $match[1]);
60+
61+
foreach ($_bpParams as $bpParam) {
62+
$_param = explode('=', $bpParam);
63+
if ($_param[1]) {
64+
$arBpParams[$_param[0]] = $_param[1];
65+
}
66+
}
67+
}
68+
69+
// Если в параметрах нет шаблона, добавим тот, что указан для категории, но из папки blockpro
70+
if (!$arBpParams['template']) {
71+
// Шаблон по умолчанию
72+
$bpTplName = 'shortstory';
73+
74+
// Если для категории задан другой шаблон, подставим его
75+
if ($category_id and $cat_info[$category_id]['short_tpl'] != '') {
76+
$bpTplName = $cat_info[$category_id]['short_tpl'];
77+
}
78+
79+
$arBpParams['template'] = 'blockpro/'.$bpTplName;
80+
}
81+
82+
$_pbParams = [];
83+
foreach ($arBpParams as $key => $value) {
84+
$_pbParams[] = $key.'='.$value;
85+
}
86+
$bpParams = implode('&', $_pbParams);
87+
88+
unset($_pbParams);
89+
unset($arBpParams);
90+
91+
// Строка для загрузки модуля
92+
$bpTplString = 'engine/modules/base/blockpro.light.php?'.$bpParams;
93+
94+
// Строка для подстановки в шаблон, что бы загрузить модуль через штатные средства DLE
95+
$tplIncludeString = '{include file="'.$bpTplString.'"}';
96+
97+
// Делаем одинаковыми переменные copy_template и template для того, что бы DLE не отстрелил `Filtered`
98+
$tpl->copy_template = $tpl->template = $tplIncludeString;
99+
100+
// Массив, который будем передавать
101+
$tplArr = ['', $bpTplString];
102+
// Установим корректный include_mode
103+
$tpl->include_mode = 'php';
104+
105+
// load_file вернёт уже скомпиленный код, поэтому можно сразу закинуть его в result
106+
$tpl->result['content'] = $tpl->load_file($tplArr);
107+
}
108+
109+
}
110+
111+
if (!$blockpro_enabled) {
112+
// DLE-BlockproLight end]]></replacecode>
113+
</operation>
114+
<operation action="before">
115+
<searchcode><![CDATA[$tpl->clear();]]></searchcode>
116+
<replacecode><![CDATA[// DLE-BlockproLight start
117+
// Закрывающая скобка для условия `if (!$blockpro_enabled) {` разсположенного выше по коду
118+
}
119+
// DLE-BlockproLight end]]></replacecode>
120+
<searchcount>1</searchcount>
121+
<replacecount>1</replacecount>
122+
</operation>
123+
</file>
124+
</dleplugin>

engine/modules/base/blockpro.light.inc.php

Lines changed: 21 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@
2424

2525
/** @var bool $showstat */
2626
if ($showstat) {
27-
$start = microtime(true);
28-
$dbStat = '';
27+
$start = microtime(true);
2928
}
3029
/**
3130
* Конфиг модуля
@@ -74,7 +73,6 @@
7473
}
7574

7675

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

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

134-
if($isAjaxConfig) {
135-
if ($_REQUEST['skin']) {
136-
echo '<pre class="dle-pre">skin: ';
137-
print_r($_REQUEST['skin']);
138-
echo '</pre>';
139-
$_REQUEST['skin'] = $_REQUEST['dle_skin'] = trim(totranslit($_REQUEST['skin'], false, false));
140-
}
141-
142-
if ($_REQUEST['dle_skin']) {
143-
echo '<pre class="dle-pre">dle_skin: ';
144-
print_r($_REQUEST['dle_skin']);
145-
echo '</pre>';
146-
$_REQUEST['dle_skin'] = trim(totranslit($_REQUEST['dle_skin'], false, false));
147-
if ($_REQUEST['dle_skin'] AND @is_dir(ROOT_DIR.'/templates/'.$_REQUEST['dle_skin'])) {
148-
$currentSiteSkin = $_REQUEST['dle_skin'];
149-
}
150-
} elseif ($_COOKIE['dle_skin']) {
151-
echo '<pre class="dle-pre">kookies: ';
152-
print_r($_COOKIE['dle_skin']);
153-
echo '</pre>';
154-
$_COOKIE['dle_skin'] = trim(totranslit((string)$_COOKIE['dle_skin'], false, false));
155-
if ($_COOKIE['dle_skin'] AND is_dir(ROOT_DIR.'/templates/'.$_COOKIE['dle_skin'])) {
156-
$currentSiteSkin = $_COOKIE['dle_skin'];
157-
}
158-
}
159-
}
160-
161132
// Формируем имя кеша
162133
$cacheName = implode('_', $cfg).$currentSiteSkin;
163134

@@ -377,7 +348,7 @@
377348

378349
// Результат обработки шаблона
379350
try {
380-
$output = $base->tpl->fetch($currentSiteSkin . '/' . $base->cfg['template'].'.tpl', $tplArr);
351+
$output = $base->tpl->fetch($base->dle_config['skin'].'/'.$base->cfg['template'].'.tpl', $tplArr);
381352
} catch (Exception $e) {
382353
$outputLog['errors'][] = $e->getMessage();
383354
$base->cfg['nocache'] = true;
@@ -388,22 +359,6 @@
388359
$base->cfg['nocache'] = true;
389360
}
390361

391-
// Формируем данные о запросах для статистики, если требуется
392-
if ($base->cfg['showstat'] && $user_group[$member_id['user_group']]['allow_all_edit']) {
393-
$statQ = [];
394-
395-
foreach ($stat as $i => $q) {
396-
$statQ['q'] .= '<br>'.'<b>['.($i + 1).']</b> '.$q['query'].' <br>['.($i + 1).' время:] <b>'.$q['timer']
397-
.'</b>';
398-
$statQ['t'] += $q['timer'];
399-
}
400-
if (isset($statQ['q'])) {
401-
$dbStat = 'Запрос(ы): '.$statQ['q'].'<br>Время выполнения запросов: <b>'.$statQ['t'].'</b><br>';
402-
}
403-
404-
unset($stat);
405-
}
406-
407362
// Создаём кеш, если требуется
408363
if (!$base->cfg['nocache']) {
409364
create_cache($base->cfg['cachePrefix'], $output, $cacheName, $cacheSuffix);
@@ -430,27 +385,24 @@
430385
}
431386

432387
// Результат работы модуля
433-
/** @var boolean $external */
434-
if (!$external) {
435-
// Если блок не является внешним - выводим на печать
436-
if (count($outputLog['errors']) > 0) {
437-
// Выводим ошибки, если они есть
438-
$outputErrors = [];
439-
$outputErrors[]
440-
= '<ul class="bp-errors" style="border: solid 1px red; padding: 5px; margin: 5px 0; list-style: none; background: rgba(255,0,0,0.2)">';
441-
442-
foreach ($outputLog['errors'] as $errorText) {
443-
$outputErrors[] = '<li>'.$errorText.'</li>';
444-
}
445-
$outputErrors[] = '</ul>';
388+
// Если блок не является внешним - выводим на печать
389+
if (count($outputLog['errors']) > 0) {
390+
// Выводим ошибки, если они есть
391+
$outputErrors = [];
392+
$outputErrors[]
393+
= '<ul class="bp-errors" style="border: solid 1px red; padding: 5px; margin: 5px 0; list-style: none; background: rgba(255,0,0,0.2)">';
394+
395+
foreach ($outputLog['errors'] as $errorText) {
396+
$outputErrors[] = '<li>'.$errorText.'</li>';
397+
}
398+
$outputErrors[] = '</ul>';
446399

447-
$outputErrors = implode('', $outputErrors);
400+
$outputErrors = implode('', $outputErrors);
448401

449-
echo $outputErrors;
450-
} else {
451-
// Если нет ошибок - выводим результат аботы модуля
452-
echo $output;
453-
}
402+
echo $outputErrors;
403+
} else {
404+
// Если нет ошибок - выводим результат аботы модуля
405+
echo $output;
454406
}
455407

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

0 commit comments

Comments
 (0)