Замена вызова картинок в 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;
}
Комментарии ()