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 >
0 commit comments