simple_html_dom

Модифицируем HTML на лету
Версия 1.0.1-pl
Дата выпуска 13.11.2019
Загрузки 90
Просмотры 5 830
Компонент помогает преобразовать уже сформированный и готовый к выводу HTML код, модифицируя его «на лету». Работа основана на плагине срабатывающем на событие OnWebPagePrerender.

Для удобства работы с HTML подключена библиотека simple_html_dom

Пример работы (плагин (а точнее заготовка) уже есть в комплекте)

switch ($modx->event->name) {
    // Стартуем плагин
    case 'OnWebPagePrerender':
        // Получаю доступ к  DOM дереву
        $output = &$modx->resource->_output;
        // Здесь доступны все поля ресурса. 
        // Определяю с каким шаблоном имею дело. 
        $template = $modx->resource->template;

        
        //Подключаю библиотеку
        include_once MODX_CORE_PATH . 'components/simple_html_dom/vendor/simple_html_dom.php';

        if (class_exists('simple_html_dom')) {
            $html = new simple_html_dom;
            $html->load($output);
            switch ($template) {                
                case 17:
            // Внутри конкретного шаблона Ищу все изображения внутри div.content
            foreach ($html->find('.content img') as $img) {
                /**
                 * @var simple_html_dom_node $img
                 */
                // Хочу активировать Lazy load для этого 
                // Сохраняю ссылку на изображение
                $src = $img->src;
                if ($src) {      
                    // Удаляю атрибут src              
                    $img->src = null;
                    // Добавляю атрибут data-src
                    $img->{'data-src'} = $src;                    
                   // Добавляю класс lazy
                    $img->class = 'lazy';
                //  Далее картинки с нужным классом и дата атрибутом подхватит js плагин lazy load и сайт прилично ускорит свою работу
                }
            }

             break;
            }
            $output = $html->save();
            $html->clear();
            unset($html);
            $output = preg_replace('|\s+|', ' ', $output);
        }
        break;
}

Еще несколько примеров использования:

Очищаем контент от лишнего мусора в атрибутах
foreach ($html->find('.product_page table') as $table) {
                $table->border = null;
                $table->cellpadding = null;
                $table->cellspacing = null;
                $table->style = null;
                $table->width = null;
                $table->class = 'table table-responsive';
            }

            foreach ($html->find('.product_page table tr') as $tr) {
                $tr->style = null;
            }

Добавляем обертку noindex для всех фреймов
foreach ($html->find('iframe') as $iframe) {
                $iframe->outertext = '<!--noindex-->' . $iframe->outertext . '<!--/noindex-->';
            }

Добавляем обертку noindex для внешних ссылок
foreach ($html->find('link') as $link) {
                if (is_external_url($link->href) && stripos($link->href, $site_url) !== 0) {
                    $link->outertext = '<!--noindex-->' . $link->outertext . '<!--/noindex-->';
                }
            }

Добавляем rel=nofollow и target=_blank для внешних ссылок
foreach ($html->find('link') as $link) {
                if (is_external_url($link->href) && stripos($link->href, $site_url) !== 0) {
                    $link->rel = 'nofollow';
                    $link->target = '_blank';
                }
            }

В общем как вы видите — довольно простыми манипуляциями можно как угодно модифицировать html разметку страницы без вмешательства в исходных код шаблонов и текста в текстовом редакторе.

Более подробно о работе компонента можно почитать в нашем сообществе

1.0.0-pl

  • Добавлена функция is_external_url

1.0.0-pl

  • Первоначальный релиз

Последние обсуждения в сообществе MODX.pro