Версия 1.0.5-beta1
Дата выпуска 06.08.2026
Загрузки 17
Просмотры 463
Внимание, этот компонент требует PHP 8.2 или выше!
Внимание, этот компонент требует MODX 3 или выше.
ImageOptimizer ускоряет сайт на MODX 3 без правки чанков: конвертирует загруженные JPEG и PNG в WebP (и опционально AVIF), создаёт responsive-варианты и на выходе страницы подставляет с srcset. Браузер получает меньший файл, оригиналы остаются fallback.

Что получаете после установки
  • Меньший вес картинок — статические WebP/AVIF рядом с оригиналом (photo.768.webp), отдаются как обычные файлы, без PHP на каждый запрос
  • Responsive из коробки — breakpoints 480–1920 px (настраиваются), srcset и sizes в разметке
  • Авто-picture — плагин на OnWebPagePrerender оборачивает локальные , шаблоны и чанки не трогаете
  • Очередь под контролем — Vue-админка: статистика, фильтры, retry, rebuild по файлу или папке, кнопка Обработать очередь (cron не обязателен для старта)
  • Массовая обработка архива — пересборка каталога товаров (assets/images/products), загрузок MS3 (images/resources) или любого path в media source
  • Умные пропуски — Thumb3x/pThumb, SVG, внешние URL, класс no-optim, атрибут data-imageoptimizer-skip, уже готовый srcset или picture

Три шага до результата
  1. Установите пакет, pdoTools и VueTools (≥ 1.1.2-pl). На вкладке Сервер проверьте, что WebP «Доступен».
  2. Загрузите изображение в File Manager или нажмите Пересобрать очередь по нужной папке → Обработать очередь.
  3. Откройте страницу с картинкой — в HTML появится picture с WebP source (при inject_frontend=1 и активном плагине).

Для кого
  • Контент-сайты и лендинги — ускорение без ручной верстки picture
  • Интернет-магазины на MS3 — галереи товаров и загрузки resources
  • Разработчики — CLI/cron (cli/convert.php, cron/convert.php), права ACL, HTML-кэш инъекции, QA-стенд с 20 секциями тестов


Требования: MODX 3.0+, PHP 8.2+, GD или Imagick с WebP. AVIF — по желанию (cwebp, avifenc).

Скриншоты










Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[1.0.5-beta1] - 2026-08-06

Fixed

  • Сохранение настроек в админке: handler создаёт modSystemSetting, если записи нет в БД, и сбрасывает кэш system_settings (иначе updated=0 и после refresh всё сбрасывалось)
  • settings/get отдаёт булевы настройки (enabled, convert_on_upload, html_cache и т.д.) как true/false, а не строки '1'/'0' — иначе переключатели в админке снова показывались включёнными после сохранения
  • Обзор: во время «Обработать очередь» карточки больше не закрываются скелетоном — видны pending/done/failed/skipped
  • Live и polling не перерисовывают «Готовность сервера» каждые 5 с; обновляются только счётчики очереди
  • Вкладка «Очередь»: таблица не закрывается loading-спиннером на время обработки; обновление строк идёт quietly
  • Uninstall: resolver_uninstall.php больше не делает безусловный require_once файлов компонента (file-resolver может удалить их раньше). Флаг cleanup читается из БД; DROP TABLE и очистка core/cache/imageoptimizer/ — без helpers; удаление вариантов на диске — только если helpers ещё есть, в try/catch. Диалог uninstall больше не зависает с 500

Changed

  • Прогресс на Обзоре считает завершённые задачи (done + failed + skipped), а не только done
  • Под прогрессом строка «В этом запуске / в очереди / ошибки» (imageoptimizer.queue.batch_progress)
  • Подсказки настроек: convert_on_upload явно не влияет на «Пересобрать» и breakpoints; пустые breakpoints = только full-size WebP/AVIF без ресайза (для уже подогнанных медиа)

Added

  • PHPUnit: SettingsTest, UninstallResolverTest

[1.0.4-beta1] - 2026-08-01

Fixed

  • Inject оставляет кириллицу и UTF-8 как есть; saveHTML() больше не превращает текст в Д. HTML-кэш сбрасывается через IMAGEOPTIMIZER_HTML_SERIALIZE_REV

Added

  • «Обработать очередь» крутит батчи до pending = 0, есть «Остановить»; у Live подсказка про cron

[1.0.3-beta1] - 2026-07-13

Fixed

  • Inject сохраняет , и ` на полном HTML-документе (больше не оборачивает страницу в#imageoptimizer-root`)
  • Убран артефакт ` после inject; HTML-кэш инвалидируется черезIMAGEOPTIMIZER_HTML_SERIALIZE_REV`

[1.0.2-beta1] - 2026-07-11

Fixed

  • Inject не разбирает содержимое ,, , через DOMDocument — строки с HTML в JS больше не ломают страницу
  • HTML-кэш inject учитывает хэш содержимого страницы (в т.ч. Fenom file:), а не только editedon ресурса

[1.0.1-beta1] - 2026-07-05

Fixed

  • HTML-кэш inject не используется для авторизованных пользователей фронтенда
  • Placeholder imageoptimizer.skip_html_cache отключает кэш inject (сниппеты, плагины)

[1.0.0-beta1] - 2026-06-28

Added

  • Конвертация JPEG/PNG/GIF/WebP в WebP и опционально AVIF (GD, Imagick, cwebp, avifenc)
  • Responsive-варианты по breakpoints (по умолчанию 480–1920 px), файлы рядом с оригиналом
  • Очередь imageoptimizer_queue: pending, processing, done, failed, skipped
  • Плагин: OnFileManagerUpload (enqueue + sync convert), OnWebPagePrerender (inject ``)
  • Vue-админка: Обзор, Очередь, Настройки, Сервер, Совместимость (VueTools ≥ 1.1.2-pl)
  • Connector API: queue/list, retry, rebuild, clear, reset_stuck, process, stats, settings, server/check
  • Кнопка «Обработать очередь» в админке (worker cron/CLI, lock cron.lock)
  • Rebuild по одному файлу или каталогу (imageoptimizer_rebuild_path)
  • CLI cli/convert.php, cron cron/convert.php, cron/prune.php
  • Пропуски inject: skip_classes, skip_src_pattern (Thumb3x), data-imageoptimizer-skip, SVG, внешние URL
  • HTML-кэш инъекции, права ACL (view, settings, run)
  • Документация: readme.txt, changelog.txt. Полный индекс и API — docs.modx.pro

Requirements

  • MODX Revolution 3.0+
  • PHP 8.2+
  • pdoTools, VueTools ≥ 1.1.2-pl
  • GD или Imagick с WebP (AVIF опционально)

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