Замена вызова картинок в content MODX
Замена и оборачивание необходимых картинок в поле Содержимое (content) перед выводом на фронте.
Идея позамствована на просторах интернета, адаптирована и настроена под свои нужды.
Происходит замена картинки на миниатюру и оборачивание в тег a, создания галерии для fancybox
<?php switch ($modx->event->name) { //Работа с контентом case 'OnLoadWebDocument': $content = $modx->resource->content; $content = mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'); //исправляем ошибки кодировки libxml_use_internal_errors(true); $saveHtml = false; $dom = new DOMDocument; if ($dom->loadHTML($content, LIBXML_HTML_NODEFDTD)){ //LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD $imgs = $dom->getElementsByTagName('img'); //ищем все изображения $wm = $modx->getOption('imageWM'); $wo = $modx->getOption('imageOpacity'); $wp = $modx->getOption('imagePosition'); foreach ($imgs as $img) { if ($img->parentNode->nodeName <> 'a'){ //берем изображения не обернутые тегом А if ($img->getAttribute('class') == 'fullscreen'){ //поиск и замена изображений нужного класса //$modx->log(4,print_r($img->parentNode->nodeName."\n")); $width=$img->getAttribute('width'); //получение нужных атрибутов изображения $src=$img->getAttribute('src'); $alt=$img->getAttribute('alt'); $title=$img->getAttribute('title'); $class=$img->getAttribute('class'); $style=$img->getAttribute('style'); $a=$dom->createElement('a'); //создание обертки картинки $a->setAttribute('data-fancybox', 'content'); $a->setAttribute('title', $title); $a->setAttribute('alt', $alt); //вызываем сниппет phpthumpon с параметрами, часть которых хранится в конфигурации к сайту и создаем большую картинку сводяным знаком $h = $modx->runSnippet('phpthumbon', array('input' => $src, 'options' => 'h=800&zc=0&fltr[]=wmi|'.$wm.'|'.$wp.'|'.$wo.'|||0')); $a->setAttribute('href', $h); $a->setAttribute('style', $style); $m=$dom->createElement('img'); //переделываем картинку $m->setAttribute('title', $title); $m->setAttribute('alt', $alt); if (preg_match('/%$/', $width)){ $m->setAttribute('src', $src); $m->setAttribute('width', $width); }else{ $s = $modx->runSnippet('phpthumbon', array('input' => $src, 'options' => 'w='.(int)$width.'&zc=0')); $m->setAttribute('src', $s); } $a->appendChild($m); $img->parentNode->replaceChild($a, $img); }else{ $img->setAttribute('class','nocopyimg'); } $saveHtml =true; } } if ($saveHtml){ //компилируем html и устанавливаем $html = $dom->saveHTML($dom->documentElement); // что бы не было сущностей в коде $str = strtr($html, array('<body>'=>'','<html>'=>'','</body>'=>'','</html>'=>'')); // без этих элементов ломало верстку, поэтому после окончания работ их просто удаляем $modx->resource->set('content', $str); } } break; }
Комментарии ()