Минификсация html кода в 1 строку

Доброго! размещаю инструкцию чтобы не потерять, ну и просто если кому понадобится, все же вещь полезная. Позволяет перевести весь код страницы в неудобный для копирования html код.
+ удаляет комментарии <!- ->, пробелы, табуляцию. Это частично отбивает желание копировать ваш сайт, ускоряет немного загрузку. Данное сжатие можно включать и отключать tv полем.

Не ругайтесь если что-то подобное уже лежит на modx.pro, я доработал код и теперь все работает так как мне нужно. Можно было бы добавить данную функцию в компонент minifyx

В итоге получим вот такой вывод html на своем сайте.


1. Создаем TV поле с названием tvMinifyxHtml
— Тип ввода: список (одиночный выбор).
— Возможные варианты: Да==1||Нет==0
— Значение по умолчанию: 1
— Включаем для всех шаблонов на сайте
— Запоминаем id этого tv поля

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


2. Создаем плагин с названием MinifyxHtml
Содержимое:
<?php
if($modx->event->name=='OnWebPagePrerender'){
  $flag=true;
  if(isset($tvMinifyxHtml) && (int)$tvMinifyxHtml>0){
     $id = $modx->resource->get('id');
     $tvs = $modx->getObject('modTemplateVarResource',array('tmplvarid'=>(int)$tvMinifyxHtml, 'contentid'=>$id));
     if($tvs && 0==$tvs->get('value')){
           $flag=false;
     }
  }
  if($flag){
      $html = &$modx->resource->_output;
      $html = preg_replace('|\s+|', ' ', $html);
      $html = preg_replace('#<!--.*-->#sUi', '', $html);
      $html = str_replace('> <','><', $html);
  }
}
4. Включаем системное событие:
OnWebPagePrerender

5. Добавляем в плагин параметр:
Название: tvMinifyxHtml
Значение: id вашего tv-поля
Тип: Текстовое поле

После этого обновляем страницу на сайте, при просмотре кода страницы (не инспектор) увидите сжатый, чистый html
Сергей
10 сентября 2020, 15:03
modx.pro
5
676
+3

Комментарии: 10

Alexey Medvedev
10 сентября 2020, 15:11
+2
Для этого уже есть готовый компонент: MinifyHTML
    Сергей
    10 сентября 2020, 15:13
    0
    Ну приехали)) я его не видел, хотя искал долго и нудно, ничего толком не нашел. Этот компонент не отключает закомментированный код из коробки. В любом случае мой вариант более гибок, можно отключить если что.
      Alexey Medvedev
      10 сентября 2020, 15:21
      +1
      Думаю, что лучше вынести параметр «Сжатие HTML» в настройки сайта, чем делать через ТВ-значение. Но каждый сам изобретает свой велосипед ;)
    Андрей
    10 сентября 2020, 15:45
    0
    В настройках pdoTools можно в параметре pdotools_fenom_options указать {«strip»:true}
      R2m0x94 (Vasily)
      10 сентября 2020, 16:55
      0
      Не, такой способ не прокатит, так как вырезает не то что надо. Как вариант можно использовать в разработке свои модификаторы. В целом минификация HTML всегда необходима, как целой стр., так и кусочка стр.
      Руслан Алеев
      10 сентября 2020, 17:46
      +2
      А зачем вам TV?
      Можно просто плагином на событие OnWebPagePrerender:
      <?php
      // Проверяем событие OnWebPagePrerender и тип содержимого, для HTML == 1
      if ($modx->event->name == 'OnWebPagePrerender' && $modx->resource->content_type == 1) {
          $output = &$modx->resource->_output;
          $output = preg_replace('|\s+|', ' ', $output);
      }
        Павел Гвоздь
        10 сентября 2020, 20:11
        +1
        1) 2.7Мб первое изображение, да ещё и не под катом?! joxi.ru/a2X5gn6hDRqekA Нужно сжимать, хотя бы из уважения к сообществу.

        2) Скройте код по кат.
        Павел Бигель
        11 сентября 2020, 00:33
        +5
        Не хочу никого обижать, но минифицировать страницу с предварительным запросом в тивиху, звучит как начало анекдота
          wfoojjaec
          03 ноября 2020, 16:12
          +2
          Небольшой отзыв из личного опыта о таком методе. Очень не советую по ряду причин.
          Обрабатывать HTML, как и любую структуру, регулярками, а не полноценным построением подели через парсинг, очень плохая идея. Про это неоднократно пишут. Возможны самые различные последствия, самые вкусные из которых:

          1. Повреждение преформатированного текста, где важен каждый символ.
          2. Повреждение ld+json разметки, json-аттрибутов, шаблонов, где пробелы тоже часто играют роль.
          3. Повреждение JavaScript кода, в частности регулярных выражений, строк и логики (потеря перевода строки может приводить к нерабочему коду).

          И другие подобные прелести.
          Лучше пользоваться услугами CDN, если уже совсем лень.
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            10