Информер курса валют ЦБ РФ   •   Магазин расширений
3 647 просм
45 комм
Поделиться:

Минификация (сжатие) исходного кода (HTML) в DLE на PHP

Недавно мы с вами рассмотрели способ минификации исходного кода на сайте Bitrix. Чтобы не дублировать сообщение о том, что это такое и что оно дает, прочитайте статью по ссылке выше.

В данной статье мы будем минифицировать (сжимать) исходный код сайта, который находится на CMS DataLife Engine.

Итак, приступим.

1. Подключитесь к вашему сайту по FTP.

2. Откройте файл index.php в корневой папке вашего сайта и сразу после <?php вставьте:

function minify_html($buffer) {

	$search = array("/\>[^\S ]+/s", "/[^\S ]+\</s", "/(\s)+/s", "/<!--(?![^<]*noindex)(.*?)-->/");
	$replace = array(">", "<", "\\1", "");
	$buffer = preg_replace($search, $replace, $buffer);

	return $buffer;

}

Сохраните и отправьте файл обратно на сайт.

3. Далее откройте файл main.php в папке /engine/modules/. Найдите:

echo $tpl->result['main'];

и замените его на:

ob_start("minify_html");
echo $tpl->result["main"];
ob_end_flush();

Сохраните и также отправьте файл на сайт.

В панели управления вашим сайтом, на главной странице, почистите кэш, после чего зайдите на свой сайт и посмотрите исходный код. Если вы все сделали правильно – исходный код вашего сайта будет в одну строку.

«Pandoge» - помощник веб-мастера
45
комментариев
22.03 в 23:55

Спасибо, давно искал не мог найти решения, а тут так все просто супер)

  • 2
23.03 в 00:11

Скажите, а как прописать, чтоб код сжимался всем кроме админа?

  • 0

Богдан, этого в 3 шаге

ob_start("sanitize_output");

echo $tpl->result['main'];

ob_end_flush();

замените на

if($member_id['user_group'] != 1) { ob_start("sanitize_output"); }

echo $tpl->result['main'];

if($member_id['user_group'] != 1) { ob_end_flush(); }

Где 1 - это ID группы, для которой сжатие не работает, в нашем случае - это группа администраторов.

  • 7
23.03 в 13:14

спасибо большое, все работает =) Крутая штука, особенно поможет тем кто делает оптимизацию для google pagespeed.

  • 1
25.03 в 19:56

Благодарю, хорошая вещь все отлично работает;)

  • 2
8.04 в 21:32

Спасибо пригодилось.

  • 0
17.04 в 10:27

Здравствуйте !

Скажите поисковые системы нормально будут видеть и относится к этому коду ?

Проблем по индексации не будет ?

  • 1

Дмитрий, да, вполне хорошо. Изменений особых нет, только убираются лишние пробелы, комментарии кода и прочий, не нужный мусор.

  • 6
9.06 в 19:21

Добрый вечер. У меня на версии 10,3 нет этого файла маин

  • 1

Megazvezda, Здравствуйте!

3-м шагом, echo $tpl->result['main']; ищите не в main.php а в index.php (почти в самом конце) который лежит в корне вашего сайта.

  • 5
10.06 в 09:03

Спасибо большое! Только мне этот хак не подошел. После манипуляций гугл спеед занижает показатели

  • 0

Megazvezda, этого мало чтобы повысить оценку Google. Но при установке - все равно является плюсом. wink

  • 5

Найден небольшой недочет. При использовании тега [code] - исходный код внутри этого тега тоже сжимается. Чтобы добавить исключение, строку

$search = array('/\>[^\S ]+/s', '/[^\S ]+\</s', '/(\s)+/s', '/<!--(.*?)-->/',);

замените на

$search = array('/\>[^\S ]+/s', '/[^\S ]+\</s', '/(?![^<]*<\/code>)(\s)+/s', '/<!--(.*?)-->/',);

  • 5
13.03 в 20:23

В админке тоже все будет в одну строчку или так как и прежде?

  • 0

Zhurik, хак не распространяется на админку.

  • 10
16.04 в 23:47

Как не сжимать определенные теги типа <yamps></yamaps>?

  • 1

андрей, на первой странице, 3 комментарий снизу. Список исключения делается по аналогии.

  • 5
20.04 в 15:38

Как мне исключить эти теги ? я так и не понял

  • 0

андрей,

$search = array('/\>[^\S ]+/s', '/[^\S ]+\</s', '/(\s)+/s', '/<!--(.*?)-->/',);

замените на

$search = array('/\>[^\S ]+/s', '/[^\S ]+\</s', '/(?![^<]*<\/yamps>)(\s)+/s', '/<!--(.*?)-->/',);

Пробовали?

  • 4
21.04 в 19:39

да, все равно удаляет код карты, а как только отключаю сжатие все встает на свои места

  • 0
12.09 в 18:59

Здравствуйте Артём, после того как вы изменили 2 пункт, ваш Хак перестал работать. У меня версия 11.2.

К слову, прежняя версия кода:

function sanitize_output($buffer) {

$search = array('/\>[^\S ]+/s', '/[^\S ]+\</s', '/(\s)+/s', '/<!--(.*?)-->/',);

$replace = array('>', '<', '\\1', '');

$buffer = preg_replace($search, $replace, $buffer);

return $buffer;

}

работает отлично.

  • 0

Артём, спасибо за замечание. В статье поправил.

  • 0
27.09 в 13:00

Спасибо большое! В большинстве случаев PageSpeed просит это!

  • 0
17.12 в 20:46

Добрый день, не подскажете как можно добавить в исключение эти теги: <!--noindex--><!--/noindex-->

  • 0

list, поправили код в статье. Проверьте.

  • 0
19.12 в 23:29

Так, как в статье не работает, там две кавычки лишние. Если их убрать, то работает, но только открывающий тег появляется, а закрывающий <!--/noindex--> нет

  • 0

list, спасибо за замечания. Просмотрели. nerd

Кавычки поправили и добавили рабочий вариант.

  • 1

Добрый день, после этого код сжался но при переходе на страницу с новостью выдает след ошибку

/engine/cache/system/plugins/ba23314b9ef6d588ec169a40d86d8b8f.php on line 1994

но данного файла даже нету в папке, а точней нету этого /plugins/ba23314b9ef6d588ec169a40d86d8b8f.php

  • 0

Евгений Лысенко, Здравствуйте.

Кеш чистили? Плагинов много установлено?

  • 0

Артем Мáлков, плагин только один стоит который не родной идет.

Telegram Posting

Кеш чистил и браузера и CMS, заходил через инкогнито такое же самое

  • 0

Евгений Лысенко, есть возможность предоставить доступ к сайту? Админка+FTP.

  • 0
19.08 в 23:24

А этот процесс хоть как-то кэшируется? Или сервер производит сжатие каждый раз когда посетитель открывает какую-либо страницу на сайте?

  • 0

Bashmak, каждый раз при посещении. Для кеширования страниц вроде есть какой-то сторонний модуль.

А так, где я лично тестировал этот способ, даже на слабеньком хостинге проблем не наблюдал.

  • 0
20.08 в 00:01

Артем Мáлков, а посещаемость какая была?

Кажись при большой посещаемости сервер не выдержит каждому юзеру пока он перемещается по сайту каждый раз сживать ему код. А если например одновременно 500 или 1000 человек зайдут на сайт, сервер должен будет произвести 1000 сжатий страниц?

Попробую поставить на пару дней, потом отпишу о результатах.

  • 0

Bashmak, пробуйте. Ждем результатов. smiley

  • 0
22.08 в 22:33

Не смог установить хак, так как у меня другой плагин меняет

echo $tpl->result['main'];

на

eval (' ?' . '>' . $tpl->result['main'] . '<' . '?php ');

Это мне нужно для того чтобы я мог в шаблонах tpl использовать php код.

Как-то можно адаптировать под этот код?

  • 0
22.08 в 22:37

Может вот так?

ob_start("sanitize_output");

eval (' ?' . '>' . $tpl->result['main'] . '<' . '?php ');

ob_end_flush();

Так правильно будет?

  • 0
22.08 в 22:46

Вроде сработало, но, хак в некоторых местах ломает дизайн сайта, наверное всё таки не буду использовать. Да и в page speed у гугла вообще ничего не изменилось.

  • 0

Bashmak, попробуйте так:

ob_start("minify_html");

eval(" ?>".$tpl->result["main"]."<?php ");

ob_end_flush();

Ломать может, если в верстке есть ошибки.

  • 0

Артем Мáлков, да могу предоставить! но уже сделал бэкап ибо обычно очисткой не пропадала ошибка

  • 0

Евгений Лысенко, долго что-то решали проблему smiley

Присылайте данные через форму обратной связи, постараемся помочь.

  • 0

Артем Мáлков, Сайт на стадии запуска, то не всегда к нему доходят руки. smiley

  • 0

Артем Мáлков, Данные отправил

  • 0

Артем Мáлков, Здравствуйте, есть ли информация по этой ошибке ?

  • 0

Евгений Лысенко, здравствуйте, да.

Ошибка была не в скрипте из статьи, а в файле show.full.php (папка /engine/modules/) на Вашем сайте.

1994 строка в файла имела такой вид:

$tpl->set("{full-story}", $row["full_story"]);$row['full_story'] );

Это ошибка, и должно быть:

$tpl->set("{full-story}", $row["full_story"]);

Исправил это и исходный код сжимается без проблем с нормальной работой сайта.

  • 0
Показать остальные комментарии  •••
Гостям запрещено участвовать в обсуждениях сайта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
Подняться наверх