Browse Source

New functional (beta)

pull/3/head
M@dD3n 2 years ago
parent
commit
304c1c5cb1
  1. 6
      admin/lang/ru/settings.txt
  2. 11
      admin/templates/settings/settings_cache.tpl
  3. 998
      class/class.core.php
  4. 9
      class/class.database.php
  5. 119
      class/class.debug.php
  6. 4
      class/class.navigation.php
  7. 9
      class/class.request.php
  8. 8
      class/class.settings.php
  9. 6
      class/class.sysblocks.php
  10. 181
      functions/func.parserequest.php
  11. 18
      inc/config.php
  12. 10
      inc/init.php
  13. 28
      index.php

6
admin/lang/ru/settings.txt

@ -10,12 +10,12 @@ SETTINGS_NO = "Нет"
SETTINGS_BUTTON_SAVE = "Сохранить изменения"
SETTINGS_BUTTON_SAVE_AJAX = "Применить (CTRL+S)"
SETTINGS_OR = "или"
SETTINGS_MAIN_TITLE = "Управление общими настройками системы"
SETTINGS_MAIN_TITLE = "Общие настройки системы"
SETTINGS_CASE_TITLE = "Дополнительные настройки"
SETTINGS_MAIN = "Общие настройки системы"
SETTINGS_SAVED = "Настройки системы успешно сохранены"
SETTINGS_SAVED_ERR = "Не удалось сохранить настройки.<br />Попробуйте еще раз."
SETTINGS_SAVE_INFO = "В данном разделе вы можете отредактировать глобальные параметры системы. Пожалуйста, будьте предельно внимательны и помните, что Неверные параметры могут сделать систему неработоспособной."
SETTINGS_SAVE_INFO = "В данном разделе вы можете отредактировать глобальные параметры системы. Пожалуйста, будьте предельно внимательны и помните, что неверные параметры могут сделать систему неработоспособной."
SETTINGS_SAVE_CONFIRM = "Вы уверены, что хотите сохранить параметры системы?"
SETTINGS_SITE_NAME = "Название cайта:"
SETTINGS_SITE_COUNTRY = "Страна сайта:"
@ -184,3 +184,5 @@ SETTINGS_CACHE_T_NAVI = "Данные навигации"
SETTINGS_CACHE_T_MODULES = "Данные модулей"
SETTINGS_CACHE_T_QUERIES = "Данные запросов"
SETTINGS_CACHE_T_DOCS = "Данные документов"
SETTINGS_CACHE_T_COMPILED = "Данные скомпилированных документов"

11
admin/templates/settings/settings_cache.tpl

@ -80,6 +80,17 @@
<a href="javascript:void(0);" class="btn redBtn btn-clear" data-source="documents">{#SETTINGS_CACHE_CLEAR#}</a>
</td>
</tr>
<tr>
<td>
{#SETTINGS_CACHE_T_COMPILED#}
</td>
<td align="center">
<strong class="code" id="btn-compiled"><a href="javascript:void(0);" class="link btn-show" data-source="compiled">{#SETTINGS_CACHE_SHOW#}</a></strong>
</td>
<td align="center">
<a href="javascript:void(0);" class="btn redBtn btn-clear" data-source="compiled">{#SETTINGS_CACHE_CLEAR#}</a>
</td>
</tr>
<tr>
<td>
{#SETTINGS_CACHE_T_QUERIES#}

998
class/class.core.php

File diff suppressed because it is too large Load Diff

9
class/class.database.php

@ -1369,7 +1369,7 @@
* @param $cache_id
* @return bool
*/
public function cacheId($cache_id)
public function cacheId ($cache_id)
{
//-- Если это документ, то меняем расположение
if (substr($cache_id, 0, 3) == 'doc') {
@ -1431,6 +1431,12 @@
return $cache_id = 'navigations/' . $cache_id[1];
}
//-- Если это скомпилированный документ, то меняем расположение
if (substr($cache_id, 0, 3) == 'cmp') {
$cache_id = (int) str_replace('cmp_', '', $cache_id);
return $cache_id = 'compile/' . (floor($cache_id / 1000)) . '/' . $cache_id;
}
if (substr_count($cache_id, '__') > 0) {
return str_replace('__', '/', $cache_id);
}
@ -1551,6 +1557,7 @@
$this->clearCache('fld_' . $doc_id); // Поля
$this->clearCache('cmd_' . $doc_id); // Компиляция
$this->clearCache('rqe_' . $doc_id); // Элемент запроса
$this->clearCache('cmp_' . $doc_id); // Скомпилированный документ
}

119
class/class.debug.php

@ -26,6 +26,8 @@
protected static $_debug = [];
public static $_document_content = '';
public function __construct()
{
@ -946,7 +948,7 @@
*
* @return false|null|string|string[]
*/
public static function _stat_get($type = 'get')
public static function _stat_get (string $type = 'get')
{
ob_start();
@ -975,16 +977,57 @@
$stat = htmlspecialchars($stat);
$stat = preg_replace('/(=&gt;)/', '<span style="color: #FF8C00;">$1</span>', $stat);
$stat = '<pre style="background:#f5f5f5; color: #000; margin: 0; padding: 5px; border: 0; font-size: 11px; font-family: Consolas, Verdana, Arial;">'. $stat .'</pre>';
ob_end_clean();
return $stat;
}
public static function getDocumentInfo ()
{
global $AVE_Template;
$_arr = [
'DOC' => '/admin/index.php?do=docs&action=edit&Id=',
'RUBRIC' => '/admin/index.php?do=rubs&action=edit&Id=',
'BLOCKS' => '/admin/index.php?do=blocks&action=edit&id=',
'SYSBLOCK' => '/admin/index.php?do=sysblocks&action=edit&id=',
'REQUESTS' => '/admin/index.php?do=request&action=edit&Id=',
'NAVIAGTIONS' => '/admin/index.php?do=navigation&action=templates&navigation_id='
];
$doc = get_document($_REQUEST['id']);
$_edit = [];
$_edit['DOC'][$doc['Id']] = $_arr['DOC'] . $doc['Id'];
$_edit['RUBRIC'][$doc['rubric_id']] = $_arr['RUBRIC'] . $doc['rubric_id'];
foreach ($GLOBALS['block_generate'] AS $k => $v)
{
if (! in_array($k, array_keys($_arr))) {
continue;
}
foreach ($v as $key => $value) {
$_edit[$k][$key] = $_arr[$k] . $key;
}
}
$AVE_Template->assign('edit', $_edit);
$AVE_Template->assign('session', session_id());
$return = $AVE_Template->fetch(BASE_DIR . '/lib/debug/debug.tpl');
return $return;
}
/**
* @return string
*/
public static function displayInfo ()
public static function displayInfo (): string
{
global $AVE_DB;
@ -1014,6 +1057,7 @@
<li id="debug-12">MySQL</li>
<li id="debug-13">Trace</li>
<li id="debug-14">Debug</li>
<li id="debug-15">Edit</li>
</ul>
';
$out .= PHP_EOL;
@ -1113,6 +1157,77 @@
$out .= implode('', self::$_debug);
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-15-cont" style="display: none;">' . PHP_EOL;
$out .= self::getDocumentInfo();
$out .= '</div>';
$out .= PHP_EOL;
$out .= '</div>';
return $out;
}
/**
* @return string
*/
public static function displayInfoLight (): string
{
global $AVE_DB;
$out = PHP_EOL;
$out .= '<link rel="stylesheet" href="/lib/debug/debug.css" />';
$out .= PHP_EOL;
$out .= '<script>window.jQuery || document.write(\'<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js">\x3C/script>\')</script>';
$out .= PHP_EOL;
$out .= '<script src="/lib/debug/debug.js"></script>';
$out .= PHP_EOL;
$out .= '<div id="debug_btn"></div>';
$out .= PHP_EOL;
$out .= '
<div id="debug_bar">
<ul class="debug_tabs">
<li id="debug-1">Timers</li>
<li id="debug-2">Blocks</li>
<li id="debug-3">Content</li>
<li id="debug-4">Debug</li>
<li id="debug-5">Document</li>
</ul>
';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-1-cont" style="display: block;">' . PHP_EOL;
$out .= 'Time generation: ' . self::getStatistic('time') . ' sec';
$out .= '<br>';
$out .= 'Memory usage: ' . self::getStatistic('memory');
$out .= '<br>';
$out .= 'Memory peak usage: ' . self::getStatistic('peak');
$out .= '<br>';
$out .= 'Real SQL Queries: ' . $AVE_DB->DBProfilesGet('count') . ' for ' . $AVE_DB->DBProfilesGet('time') . ' sec';
$out .= '<br>';
$out .= 'All SQL Queries: ' . count($AVE_DB->_query_list);
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-2-cont" style="display: none;">' . PHP_EOL;
$out .= 'Blocks:';
$out .= self::getStatistic('blocks');
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-3-cont" style="display: none;">' . PHP_EOL;
$out .= '<pre>' . htmlspecialchars(self::$_document_content) . '</pre>';
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-4-cont" style="display: none;">' . PHP_EOL;
$out .= implode('', self::$_debug);
$out .= '</div>';
$out .= PHP_EOL;
$out .= '<div class="debug_tab" id="debug-5-cont" style="display: none;">' . PHP_EOL;
$out .= self::getDocumentInfo();
$out .= '</div>';
$out .= PHP_EOL;
$out .= '</div>';

4
class/class.navigation.php

@ -199,13 +199,15 @@
" . PREFIX . "_navigation
WHERE
navigation_id = '" . $navigation_id . "'
OR
alias = '" . $navigation_id . "'
")->FetchRow();
// Формируем список групп пользователей
$row->user_group = explode(',', $row->user_group);
// Формируем ряд переменных для использования в шаблоне и отображаем форм с данными для редактирования
$AVE_Template->assign('nid', $navigation_id);
$AVE_Template->assign('nid', $row->navigation_id);
$AVE_Template->assign('navigation', $row);
$AVE_Template->assign('groups', $AVE_User->userGroupListGet());
$AVE_Template->assign('form_action', 'index.php?do=navigation&action=templates&sub=save&navigation_id=' . $navigation_id . '&cp=' . SESSION);

9
class/class.request.php

@ -336,6 +336,8 @@
" . PREFIX . "_request
WHERE
Id = '" . $request_id . "'
OR
request_alias = '" . $request_id . "'
");
if ($sql->_result->num_rows == 0)
@ -361,10 +363,13 @@
array_push($paginations, $pages);
// Передаем данные в шаблон и отображаем страницу с редактированием запроса
if (! isset($_REQUEST['rubric_id']))
$_REQUEST['rubric_id'] = $row->rubric_id;
$AVE_Template->assign('row', $row);
$AVE_Template->assign('rid', $request_id);
$AVE_Template->assign('rid', $row->Id);
$AVE_Template->assign('paginations', $paginations);
$AVE_Template->assign('formaction', 'index.php?do=request&action=edit&sub=save&Id=' . $request_id . '&cp=' . SESSION);
$AVE_Template->assign('formaction', 'index.php?do=request&action=edit&sub=save&Id=' . $row->Id . '&cp=' . SESSION);
$AVE_Template->assign('content', $AVE_Template->fetch('request/form.tpl'));
break;

8
class/class.settings.php

@ -777,6 +777,10 @@
$size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/documents'));
break;
case 'compiled':
$size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/compile'));
break;
case 'langs':
$size = format_size(get_dir_size(BASE_DIR . '/tmp/cache/sql/langs'));
break;
@ -842,6 +846,10 @@
$cache_dir = BASE_DIR . '/tmp/cache/sql/documents';
break;
case 'compiled':
$cache_dir = BASE_DIR . '/tmp/cache/sql/compile';
break;
case 'langs':
$cache_dir = BASE_DIR . '/tmp/cache/sql/langs';
break;

6
class/class.sysblocks.php

@ -378,7 +378,7 @@
{
global $AVE_DB, $AVE_Template;
$sysblock_id = (int)$_REQUEST['id'];
$sysblock_id = $_REQUEST['id'];
$sql = "
SELECT
@ -387,11 +387,13 @@
" . PREFIX . "_sysblocks
WHERE
id = '" . $sysblock_id . "'
OR
sysblock_alias = '" . $sysblock_id . "'
";
$row = $AVE_DB->Query($sql)->FetchAssocArray();
$AVE_Template->assign('sid', $sysblock_id);
$AVE_Template->assign('sid', $row['id']);
$AVE_Template->assign('groups', self::getGroups());
if ((isset($_REQUEST['sysblock_visual']) && $_REQUEST['sysblock_visual'] == 1) || $row['sysblock_visual'] == 1)

181
functions/func.parserequest.php

@ -874,7 +874,7 @@
" . (isset($params['USER_FROM']) ? $params['USER_FROM'] : '') . "
" . PREFIX . "_documents AS a
" . implode(' ', $request_join) . "
" . (isset($params['USER_JOIN']) ? $params['USER_JOIN'] : '') . "
" . (isset($params['USER_JOIN']) ? $params['USER_FROM'] : '') . "
WHERE
" . $request_where_str . "
GROUP BY a.Id
@ -1198,6 +1198,185 @@
}
function parse_request ($id, $params = [])
{
global $AVE_Core;
// Получаем информацию о запросе
$request = request_get_settings($id);
// Фиксируем время начала генерации запроса
Debug::startTime('request_' . $id);
// Элементы запроса
$rows = $params['ROWS'];
//-- Обрабатываем шаблоны элементов
$items = '';
//-- Счетчик
$x = 0;
//-- Общее число элементов
$items_count = $num_items= count($rows);
global $req_item_num, $use_cache, $request_id, $request_changed, $request_changed_elements;
$use_cache = $request->request_cache_elements;
$request_id = $request->Id;
$request_changed = $request->request_changed;
$request_changed_elements = $request->request_changed_elements;
$limit = (isset($params['LIMIT']) && is_numeric($params['LIMIT']) && $params['LIMIT'] > '')
? (int)$params['LIMIT']
: (int)$request->request_items_per_page;
// Кол-во страниц
$num_pages = ($limit > 0)
? ceil($num_items / $limit)
: 0;
Debug::startTime('ELEMENTS_ALL');
foreach ($rows AS $row)
{
$x++;
$last_item = ($x == $items_count ? true : false);
$item_num = $x;
$req_item_num = $item_num;
Debug::startTime('ELEMENT_' . $item_num);
$item = showrequestelement($row, $request->request_template_item);
$GLOBALS['block_generate']['REQUESTS'][$id]['ELEMENTS'][$item_num] = Debug::endTime('ELEMENT_' . $item_num);
$item = str_replace('[tag:item_num]', $item_num, $item);
$item = '<'.'?php $item_num='.var_export($item_num,1).'; $last_item='.var_export($last_item,1).'?'.'>'.$item;
$item = '<'.'?php $req_item_id = ' . $row . '; ?>' . $item;
$item = str_replace('[tag:if_first]', '<'.'?php if(isset($item_num) && $item_num===1) { ?'.'>', $item);
$item = str_replace('[tag:if_not_first]', '<'.'?php if(isset($item_num) && $item_num!==1) { ?'.'>', $item);
$item = str_replace('[tag:if_last]', '<'.'?php if(isset($last_item) && $last_item) { ?'.'>', $item);
$item = str_replace('[tag:if_not_last]', '<'.'?php if(isset($item_num) && !$last_item) { ?'.'>', $item);
$item = preg_replace('/\[tag:if_every:([0-9-]+)\]/u', '<'.'?php if(isset($item_num) && !($item_num % $1)){ '.'?'.'>', $item);
$item = preg_replace('/\[tag:if_not_every:([0-9-]+)\]/u', '<'.'?php if(isset($item_num) && ($item_num % $1)){ '.'?'.'>', $item);
$item = str_replace('[tag:/if]', '<'.'?php } ?>', $item);
$item = str_replace('[tag:if_else]', '<'.'?php }else{ ?>', $item);
$items .= $item;
Registry::remove('documents', $row);
Registry::remove('fields', $row);
Registry::remove('fields_param', $row);
}
$GLOBALS['block_generate']['REQUESTS'][$id]['ELEMENTS']['ALL'] = Debug::endTime('ELEMENTS_ALL');
// Приступаем к обработке шаблона
$main_template = $request->request_template_main;
// ============ Обрабатываем теги запроса ============ //
//-- Парсим теги визуальных блоков
$main_template = preg_replace_callback('/\[tag:block:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_block', $main_template);
//-- Парсим теги системных блоков
$main_template = preg_replace_callback('/\[tag:sysblock:([A-Za-z0-9-_]{1,20}+)\]/', 'parse_sysblock', $main_template);
//-- Дата
$main_template = preg_replace_callback('/\[tag:date:([a-zA-Z0-9-. \/]+)\]/',
function ($match) use ($AVE_Core)
{
return translate_date(date($match[1], $AVE_Core->curentdoc->document_published));
},
$main_template
);
$str_replace = [
//-- ID Документа
'[tag:docid]' => $AVE_Core->curentdoc->Id,
//-- ID Автора
'[tag:docauthorid]' => $AVE_Core->curentdoc->document_author_id,
//-- Имя автора
'[tag:docauthor]' => get_username_by_id($AVE_Core->curentdoc->document_author_id),
//-- Время - 1 день назад
'[tag:humandate]' => human_date($AVE_Core->curentdoc->document_published),
//-- Дата создания
'[tag:docdate]' => pretty_date(strftime(DATE_FORMAT, $AVE_Core->curentdoc->document_published)),
//-- Время создания
'[tag:doctime]' => pretty_date(strftime(TIME_FORMAT, $AVE_Core->curentdoc->document_published)),
//-- Домен
'[tag:domain]' => getSiteUrl(),
//-- Заменяем тег пагинации на пагинацию
'[tag:pages]' => $pagination,
//-- Общее число элементов запроса
'[tag:doctotal]' => $num_items,
//-- Показано элементов запроса на странице
'[tag:doconpage]' => $x,
//-- Номер страницы пагинации
'[tag:pages:curent]' => get_current_page('page'),
//-- Общее кол-во страниц пагинации
'[tag:pages:total]' => $num_pages,
//-- Title
'[tag:pagetitle]' => stripslashes(htmlspecialchars_decode($AVE_Core->curentdoc->document_title)),
//-- Alias
'[tag:alias]' => (isset($AVE_Core->curentdoc->document_alias) ? $AVE_Core->curentdoc->document_alias : '')
];
$main_template = str_replace(array_keys($str_replace), array_values($str_replace), $main_template);
//-- Возвращаем параметр документа из БД
$main_template = preg_replace_callback('/\[tag:doc:([a-zA-Z0-9-_]+)\]/u',
function ($match) use ($row)
{
return isset($row->{$match[1]})
? $row->{$match[1]}
: null;
},
$main_template
);
//-- Если пришел вызов на активацию языковых файлов
$main_template = preg_replace_callback('/\[tag:langfile:([a-zA-Z0-9-_]+)\]/u',
function ($match)
{
global $AVE_Template;
return $AVE_Template->get_config_vars($match[1]);
},
$main_template
);
//-- Вставляем элементы запроса
$return = str_replace('[tag:content]', $items, $main_template);
unset ($items, $main_template, $str_replace, $pagination);
//-- Парсим тег [hide]
$return = parse_hide($return);
//-- Абсолютный путь
$return = str_replace('[tag:path]', ABS_PATH, $return);
//-- Путь до папки шаблона
$return = str_replace('[tag:mediapath]', ABS_PATH . 'templates/' . ((defined('THEME_FOLDER') === false) ? DEFAULT_THEME_FOLDER : THEME_FOLDER) . '/', $return);
//-- Парсим модули
$return = $AVE_Core->coreModuleTagParse($return);
//-- Фиксируем время генерации запроса
$GLOBALS['block_generate']['REQUESTS'][$id]['TIME'] = Debug::endTime('request_' . $id);
// Статистика
if ($request->request_show_statistic)
$return .= "<div class=\"request_statistic\"><br>Найдено: $num_items<br>Показано: $items_count<br>Время генерации: " . Debug::endTime('request_' . $id) . " сек<br>Пиковое значение: ".number_format(memory_get_peak_usage()/1024, 0, ',', ' ') . ' Kb</div>';
return $return;
}
/**
* Функция получения содержимого поля для обработки в шаблоне запроса
* <pre>

18
inc/config.php

@ -303,7 +303,7 @@
'DESCR' => 'Вывод общей статистики публичной части',
'DEFAULT' => 'off',
'TYPE' => 'dropdown',
'VARIANT' => ['off', 'light', 'full']
'VARIANT' => ['off', 'light', 'full', 'dev']
];
//-- Вывод общей статистики в административной части
@ -406,6 +406,22 @@
'VARIANT' => ''
];
//-- Кэширование всей страницы
$GLOBALS['CMS_CONFIG']['_CONST_CACHE']['CACHE_DOC_FULL'] = [
'DESCR' => 'Кэширование всей страницы',
'DEFAULT' => false,
'TYPE' => 'bool',
'VARIANT' => ''
];
//-- Кэширование всей страницы (для админа)
$GLOBALS['CMS_CONFIG']['_CONST_CACHE']['CACHE_DOC_FULL_ADMIN'] = [
'DESCR' => 'Кэширование всей страницы (для админа)',
'DEFAULT' => false,
'TYPE' => 'bool',
'VARIANT' => ''
];
//-- Кэширование информацию о документе и его полях
$GLOBALS['CMS_CONFIG']['_CONST_CACHE']['SITEMAP_CACHE_LIFETIME'] = [
'DESCR' => 'Время жизни кеша для карты сайта',

10
inc/init.php

@ -76,6 +76,11 @@
}
}
$_GET = add_slashes($_GET);
$_POST = add_slashes($_POST);
$_REQUEST = array_merge($_POST, $_GET);
$_COOKIE = add_slashes($_COOKIE);
unsetGlobals();
if (isset($HTTP_POST_VARS))
@ -108,11 +113,6 @@
return $array;
}
$_GET = add_slashes($_GET);
$_POST = add_slashes($_POST);
$_REQUEST = array_merge($_POST, $_GET);
$_COOKIE = add_slashes($_COOKIE);
function isSSL()
{
if (isset($_SERVER['HTTPS']))

28
index.php

@ -35,7 +35,7 @@
//-- Подключаем файл определения мобильных устройств
//-- далее пользуемся $MobileDetect
require_once (BASE_DIR . '/lib/mobile_detect/Mobile_Detect.php');
$MobileDetect = new Mobile_Detect;
$MDetect = new Mobile_Detect;
$init_start = microtime();
@ -44,6 +44,8 @@
$GLOBALS['block_generate']['INIT']['END'] = number_format(microtime_diff($init_start, microtime()), 3, ',', ' ') . ' sec';
Debug::startTime('CODEEND');
//-- Проверяем нет ли в запросе папки UPLOADS_DIR
//-- подключаем файл для работы thumbsnail
if (strpos ($_SERVER['REQUEST_URI'], ABS_PATH . UPLOAD_DIR . '/') === 0)
@ -98,6 +100,7 @@
}
//-- Собираем страницу
$AVE_Core->coreSiteFetch(get_current_document_id());
Debug::startTime('CONTENT');
@ -109,8 +112,14 @@
else
ob_start();
Debug::$_document_content = $content;
Debug::startTime('EVALCONTENT');
eval (' '.'?>' . $content . '<?'.'php ');
$GLOBALS['block_generate']['DOCUMENT']['EVALCONTENT'] = Debug::endTime('EVALCONTENT');
$render = ob_get_clean();
unset ($content);
@ -155,23 +164,8 @@
exit;
}
//-- Тут заменяем [tag:rubheader]
//-- на собранный $GLOBALS["user_header"]
$rubheader = (empty($GLOBALS['user_header'])
? ''
: implode(chr(10), $GLOBALS['user_header']));
//-- Тут заменяем [tag:rubfooter]
//-- на собранный $GLOBALS["user_footer"]
$rubfooter = (empty($GLOBALS['user_footer'])
? ''
: implode(chr(10), $GLOBALS['user_footer']));
$render = str_replace(['[tag:rubheader]', '[tag:rubfooter]'], [$rubheader, $rubfooter], $render);
unset ($rubheader, $rubfooter);
$GLOBALS['block_generate']['DOCUMENT']['CONTENT'] = Debug::endTime('CONTENT');
$GLOBALS['block_generate']['INIT']['CODEEND'] = Debug::endTime('CODEEND');
//-- Вывод конечного результата
output_compress($render);

Loading…
Cancel
Save