Быстрый и надёжный хостинг на SSD-дисках от 165р в месяц   •   Реклама
4 229 просм
45 комм
Поделиться:

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

20 мар
Хаки

Недавно мы с вами рассмотрели способ минификации исходного кода на сайте 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();

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

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

45
комментариев
Форма комментирования этой статьи скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 0
    780
      •  Администратор
    1 сен в 13:46

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

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

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

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

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

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

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

    • 0
    6
      •  Проверенный
    1 сен в 11:35

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

    • 0
    6
      •  Проверенный
    30 авг в 13:44

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

    • 0
    6
      •  Проверенный
    30 авг в 13:37

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

    • 0
    780
      •  Администратор
    29 авг в 18:41

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

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

    • 0
    6
      •  Проверенный
    29 авг в 15:33

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

    • 0
    780
      •  Администратор
    23 авг в 04:04

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

    ob_start("minify_html");

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

    ob_end_flush();

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

    • 0
    8
      •  Проверенный
    22 авг в 22:46

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

    • 0
    8
      •  Проверенный
    22 авг в 22:37

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

    ob_start("sanitize_output");

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

    ob_end_flush();

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

    • 0
    8
      •  Проверенный
    22 авг в 22:33

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

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

    на

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

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

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

    • 0
    780
      •  Администратор
    20 авг в 00:16

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

    • 0
    8
      •  Проверенный
    20 авг в 00:01

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

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

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

    • 0
    780
      •  Администратор
    19 авг в 23:45

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

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

    • 0
    8
      •  Проверенный
    19 авг в 23:24

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

    • 0
    780
      •  Администратор
    8 авг в 21:14

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

    • 0
    6
      •  Проверенный
    8 авг в 20:56

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

    Telegram Posting

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

    • 0
    780
      •  Администратор
    8 авг в 19:30

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

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

    • 0
    6
      •  Проверенный
    8 авг в 18:12

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

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

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

    • 1
    780
      •  Администратор
    20 дек в 00:13

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

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

    • 0
    2
      •  Пользователь
    19 дек в 23:29

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

    • 0
    780
      •  Администратор
    18 дек в 21:38

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

    • 0
    2
      •  Пользователь
    17 дек в 20:46

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

    • 0
    679
      •  Гости
    27 сен в 13:00

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

    • 0
    780
      •  Администратор
    12 сен в 22:58

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

    • 0
    679
      •  Гости
    12 сен в 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
    679
      •  Гости
    21 апр в 19:39

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

    • 4
    780
      •  Администратор
    20 апр в 23:53

    андрей,

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

    замените на

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

    Пробовали?

    • 0
    679
      •  Гости
    20 апр в 15:38

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

    • 5
    780
      •  Администратор
    17 апр в 01:07

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

    • 1
    679
      •  Гости
    16 апр в 23:47

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

    • 10
    780
      •  Администратор
    14 мар в 02:24

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

    • 0
    679
      •  Гости
    13 мар в 20:23

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

    • 5
    780
      •  Администратор
    13 авг в 14:49

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

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

    замените на

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

    • 5
    780
      •  Администратор
    10 июн в 13:02

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

    • 0
    679
      •  Гости
    10 июн в 09:03

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

    • 5
    780
      •  Администратор
    10 июн в 02:51

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

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

    • 1
    679
      •  Гости
    9 июн в 19:21

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

    • 6
    780
      •  Администратор
    17 апр в 15:55

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

    • 1
    679
      •  Гости
    17 апр в 10:27

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

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

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

    • 0
    679
      •  Гости
    8 апр в 21:32

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

    • 2
    679
      •  Гости
    25 мар в 19:56

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

    • 1
    679
      •  Гости
    23 мар в 13:14

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

    • 7
    780
      •  Администратор
    23 мар в 01:24

    Богдан, этого в 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 группы, для которой сжатие не работает, в нашем случае - это группа администраторов.

    • 0
    679
      •  Гости
    23 мар в 00:11

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

    • 2
    679
      •  Гости
    22 мар в 23:55

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

Подняться наверх
«Pandoge» - помощник веб-мастера