Skip to content

Instantly share code, notes, and snippets.

@ibadin
Forked from Isa3v/README.md
Created August 18, 2022 10:45
Show Gist options
  • Save ibadin/c3615c3db0a36d7305308bdc58822f85 to your computer and use it in GitHub Desktop.
Save ibadin/c3615c3db0a36d7305308bdc58822f85 to your computer and use it in GitHub Desktop.
CSS inline body | Minification HTML (Bitrix)

CSS inline body | Minification HTML (Bitrix)

Выводим css стили в тело и сжимаем html в 1 строку, удаляем css комментарии

(исправляя относительные пути изображений)

Добавляем в init.php и радуемся (или нет) как гугл прибаляет 10-15 балов

<?
// Событие получения буфера контента перед выводом
\Bitrix\Main\EventManager::getInstance()->addEventHandler("main", "OnEndBufferContent", "OrContentCssInline");
function OrContentCssInline(&$content)
{
global $USER;
// Только для пользователей делаем
if (!$USER->IsAdmin()) {
// Ищем все теги link
preg_match_all("/\<link.*\>/", $content, $styleFiles);
//Минификация контента
$useCompress = "Y";
// Максимальный размер файла css для вытаскивания его в тело файла
$weight = 128;
if (!empty($styleFiles[0])) {
// Ищем картинки и файлы с относительной папкой
$dataInCssFolder = array(
"/url\s?\([\"']?((?!'?\"?data:image)[\w\.][\/a-zA-Z\.\_\-\,]+)[\"']?\)/sU"
);
foreach ($styleFiles[0] as $style) {
// Если это не .css файл или это print стили - пропускаем
if (strpos($style, ".css") === false || strpos($style, "media='print'") !== false || strpos($style, 'media="print"') !== false) {
continue;
}
//Собираем все пути css файлов
preg_match_all("/href=[\",'](.*\.css).*[\",']/sU", $style, $findFile);
// Пути файлов
$filePath = $findFile[1][0];
if ($filePath) {
if (file_exists($_SERVER["DOCUMENT_ROOT"] . $filePath)) {
// Размер файла показываетсяв в байтах, а нам кб нужны
$weightFile = (filesize($_SERVER["DOCUMENT_ROOT"] . $filePath) / 1024);
if ($weightFile < $weight) {
// Дериктория файла:
$convertedFile = dirname($filePath) . "/";
// Подмена для относительных изображений
$replacementData = array("url('" . $convertedFile . "$1')");
// Читаем и преобразовываем css
$fileInline = file_get_contents($_SERVER["DOCUMENT_ROOT"] . $filePath);
$fileInline = preg_replace($dataInCssFolder, $replacementData, $fileInline);
// Заменяем в контенте
$content = str_replace($style, '<style type="text/css">'. $fileInline . "</style>", $content);
}
}
}
}
}
// Сжатие html
if ($useCompress == 'Y') {
$content = preg_replace(
array(
// css комментарии
"/\/\*.*?\*\//si",
// Пробелы переносы
"/(\s)+/si"
),
array(
"",
" "
),
$content
);
}
// Время выполнения скрипта: 0.0037 сек. (На стандартном шаблоне и файлах bitrix eshop)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment