Эта инструкция поможет автоматизировать оптимизацию изображений в контенте страниц сайта на MODX, превращая простые <img> теги в адаптивную разметку с тегом <picture>, поддержкой WebP, ленивой загрузкой и сжатием для ускорения загрузки страниц и улучшения SEO.
Первоисточник - Оптимизация изображений на сайте в CMF MODX Revolution
Установите пакет phpthumbon в MODX (Пакеты > Установщик). Он генерирует обрезанные, сжатые версии изображений на лету, поддерживает различные форматы и размеры для ускорения работы сайта.
Этот подход заменяет все <img> теги в контенте ресурса на оптимизированную разметку с тегом <picture>. Плагин анализирует контент перед выводом страницы и вставляет чанк с плейсхолдерами (src, alt, desc). Подходит для статей, где редакторы просто загружают изображения в визуальный редактор.
<div class="article-image__wrapper">
<picture>
<source
media="(max-width: 566px)"
srcset="[[phpthumbon?input=`[[+src]]`&options=`w=450&f=webp&q=85&dpi=72`]],
[[phpthumbon?input=`[[+src]]`&options=`w=800&f=webp&q=85&dpi=72`]] 2x"
type="image/webp">
<source
media="(min-width: 567px)"
srcset="[[phpthumbon?input=`[[+src]]`&options=`w=800&f=webp&q=85&dpi=72`]],
[[phpthumbon?input=`[[+src]]`&options=`w=1600&f=webp&q=85&dpi=72`]] 2x"
type="image/webp">
<source
media="(min-width: 567px)"
srcset="[[phpthumbon?input=`[[+src]]`&options=`w=800&f=jpg&q=85&dpi=72`]],
[[phpthumbon?input=`[[+src]]`&options=`w=1600&f=jpg&q=85&dpi=72`]] 2x"
type="image/jpeg">
<img
loading="lazy"
decoding="async"
src="[[phpthumbon?input=`[[+src]]`&options=`w=450&f=jpg&q=85&dpi=72`]]"
srcset="[[phpthumbon?input=`[[+src]]`&options=`w=800&f=jpg&q=85&dpi=72`]] 2x"
alt="[[+alt]]">
</picture>
</div>
[[+desc:notempty=`<p class='article-img-desc'>[[+desc]]</p>`]]
[[+src]] — путь к изображению, [[+alt]] — альтернативный текст, [[+desc]] — подпись (из title-атрибута).h=...&zc=1 (например, для фиксированных размеров).Обратите внимание: если изменить имя чанка, то в коде плагина также необходимо изменить имя чанка на новое.
<img> теги на вызов чанка):if ($modx->event->name != "OnLoadWebDocument" || $modx->context->key == 'mgr') {
return;
}
// Получаем контент страницы
$output = $modx->resource->get('content');
function optimage($img) {
$src = preg_replace('/.* src="(.*?)".*/m', '$1', $img[0]);
$alt = preg_replace('/.* alt="(.*?)".*/m', '$1', $img[0]);
$desc = preg_replace('/.* title="(.*?)".*/m', '$1', $img[0]);
// Если совпадений нет, оставляем пустым
if ($src == $img[0]) {
$src = '';
}
if ($alt == $img[0]) {
$alt = '';
}
if ($desc == $img[0]) {
$desc = '';
}
return '[[$imgOptimize?src=`'.$src.'`&alt=`'.$alt.'`&desc=`'.$desc.'`]]';
}
// Заменяем <img> теги (учитывая обертку в <p>)
$output = preg_replace_callback('/(<p>\s*|)<img[^>]*>(\s*<\/p>|)/m', 'optimage', $output);
// Обновляем контент ресурса
$modx->resource->set('content', $output);
src, alt и title из каждого <img> тега.imgOptimize с параметрами.<picture> с WebP.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()