Выводим 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) | |
| } | |
| } |