Часто контент-менеджеры жа и сами разработчики загружают огромные изображения с тех же фотостоков, превышающие размер контентной части в несколько раз. Например: ширина контента 1190 px, а менеджер загружает изображение 4000×3000 px. Это приводит к увеличению веса страницы и замедлению загрузки сайта. Кроме того на сервере быстрее заканчивается место.
Для решения данной проблемы создадим плагин, который позволяет настраивать параметры сжатия изображений, такие как качество, ширина, высота и формат. Таким образом, вы можете оптимизировать изображения для разных устройств и экономить место на сервере.
Создание плагина авто сжатия изображений при загрузке в MODX
Чтобы создать плагин, в дереве ресурсов перейдите в раздел и на против пункта плагины, нажмите на плюс. Откроется страница создания нового плагина. Заполняем следующими данными:
Название: ImageUploadCompressor
Код:
<?php
$fullPath = $source->getBases()['pathAbsolute'] . $directory;
foreach ($files as $file) {
if (strripos($file['type'], 'image') === false || $file['type'] == 'image/svg+xml') {
return;
}
$name = $file['name'];
$pathToImage = $fullPath . $name;
if (exif_imagetype($pathToImage) == IMAGETYPE_JPEG) {
$params = array(
'w' => 1190,
'f' => 'jpeg',
'q' => 77,
);
} elseif (exif_imagetype($pathToImage) == IMAGETYPE_PNG) {
$params = array(
'w' => 1190,
'f' => 'png',
'q' => 77,
);
} elseif (exif_imagetype($pathToImage) == IMAGETYPE_GIF) {
return;
}
$phpThumb = $modx->getService('modphpthumb', 'modPhpThumb', MODX_CORE_PATH . 'model/phpthumb/', array());
$phpThumb->setSourceFilename($pathToImage);
foreach ($params as $k => $v) {
$phpThumb->setParameter($k, $v);
}
if ($phpThumb->GenerateThumbnail()) {
if (!$phpThumb->renderToFile($pathToImage)) {
$modx->log(1, 'Ошибка сохранения изображения в [' . $pathToImage . ']');
}
} else {
$modx->log(1, print_r($phpThumb->debugmessages, 1));
}
}
Далее переходим во вкладку События, находим там «OnFileManagerUpload» ставим на против него галку, и выставляем приоритет «-1» (или «0»). Сохраняем плагин.
OnFileManagerUpload — это системное событие MODX, которое срабатывает при загрузке файла через файловый менеджер.
В массив $params можно передавать и другие параметры библиотеки phpThumb, например, водяной знак и т.п..
В дополнение см. статью о работе phpThumb вне MODX Revo.










Подскажите, как настроить выполнение плагина после траслитеризации файла по правилам системных строек «Дружественные URL».
А то получается у файла при загрузке меняется имя, и плагин не может работать с исходным файлом
У вас MODX 2 или MODX 3?