добавлены user_header и user_footer для вставки линков на css или js файлов модулей

This commit is contained in:
2026-01-09 23:31:36 +05:00
parent 6d1d99c23f
commit c4f9185883

View File

@@ -167,6 +167,53 @@
$GLOBALS['block_generate']['DOCUMENT']['CONTENT'] = Debug::endTime('CONTENT');
$GLOBALS['block_generate']['INIT']['CODEEND'] = Debug::endTime('CODEEND');
// --- ИНЖЕКТОР АССЕТОВ ---
$process_assets = function($asset_array) {
if (empty($asset_array) || !is_array($asset_array)) return '';
$clean_assets = [];
foreach (array_unique($asset_array) as $item) {
$item = trim($item);
// Разрешаем только заголовочные теги
if (!preg_match('/^<(script|link|style|meta|!--|title|base)/i', $item)) continue;
// Удаляем любые on* атрибуты (onload, onerror и т.д.)
if (preg_match('/on[a-z]+\s*=/i', $item)) continue;
// DATA: Блокируем всё, кроме безопасных изображений
if (stripos($item, 'data:') !== false && stripos($item, 'image/') === false) continue;
$clean_assets[] = $item;
}
return implode("\n", $clean_assets);
};
// Собираем данные из PHP-кода модулей
$module_header = $process_assets($GLOBALS['user_header'] ?? []);
$module_footer = $process_assets($GLOBALS['user_footer'] ?? []);
// Вставка в HEADER
if (!empty($module_header)) {
if (strpos($render, '[tag:rubheader]') !== false) {
$render = str_replace('[tag:rubheader]', $module_header . "\n[tag:rubheader]", $render);
} else {
$render = str_replace('</head>', $module_header . "\n</head>", $render);
}
}
// Вставка в FOOTER
if (!empty($module_footer)) {
if (strpos($render, '[tag:rubfooter]') !== false) {
$render = str_replace('[tag:rubfooter]', $module_footer . "\n[tag:rubfooter]", $render);
} else {
$render = str_replace('</body>', $module_footer . "\n</body>", $render);
}
}
unset($module_header, $module_footer, $process_assets);
// --- КОНЕЦ БЛОКА ИНЖЕКТОРА ---
//-- Вывод конечного результата
output_compress($render);