Доработка и ремонт сайтов

Автоматическое обновление изображений в OpenCart 3

Доработка самописного модуля карусели в OpenCart 3: устранил проблему со старыми изображениями из браузерного кэша и реализовал автоматическое обновление превью и полноразмерных картинок после замены файлов.

обновление изображений

Проблема

На сайте интернет-магазина на OpenCart 3 использовался
самописный модуль карусели с фотографиями и просмотром изображений
в увеличенном виде через лайтбокс.

После замены фотографий на новые возникла проблема: миниатюры в карусели
обновлялись, но при клике посетителю могла открываться старая версия
полноразмерного изображения
.

Очистка серверного кэша проблему полностью не решала. Более того, требовать
от посетителей очищать кэш браузера или использовать принудительное обновление
страницы было нельзя — обновление изображений должно было происходить
автоматически.

При анализе самописного модуля выяснилось, что превью и полноразмерные
изображения работают по-разному. Миниатюры создавались в каталоге кэша
OpenCart и автоматически пересоздавались после изменения оригинала.
Полноразмерная фотография при этом сохраняла прежний URL, поэтому браузер
мог продолжать использовать сохранённую ранее копию.

Решение проблемы

Самописный модуль для OpenCart 3 был доработан так, чтобы
система автоматически определяла изменение исходного файла и меняла версию
URL изображения.

Для этого была реализована автоматическая система cache busting.
Версия формируется на основе параметров самого файла — времени его последнего
изменения и размера.

В результате ссылка на изображение формируется динамически, например:

/image/catalog/photo.png?v=1788623912-483721

Пока фотография не меняется, её URL остаётся прежним и браузер может
эффективно использовать кэш.

Как только на сервер загружается новая фотография даже под тем же
именем файла
, система автоматически получает новые параметры файла
и формирует новый URL.

Для браузера это уже новый ресурс, поэтому старая закэшированная версия
больше не используется.

Дополнительно была сохранена существующая логика самописного модуля,
которая проверяет дату изменения оригинального изображения и при необходимости
автоматически пересоздаёт его уменьшенную копию для карусели.

Таким образом удалось решить проблему без отключения кэширования изображений
на всём сайте и без увеличения лишней нагрузки на сервер.

Результат

После доработки самописного модуля обновление фотографий стало полностью
автоматическим.

  • Новую фотографию можно загрузить на сервер под прежним именем.
  • OpenCart автоматически пересоздаёт актуальное превью для карусели.
  • Версия URL полноразмерного изображения меняется автоматически.
  • Посетители сразу получают актуальную фотографию вместо старой копии из кэша.
  • Не требуется вручную добавлять ?v=2, ?v=3 и другие версии.
  • Не требуется просить пользователей очищать кэш браузера или нажимать Ctrl+F5.
  • Не требуется полностью отключать кэширование изображений.
  • Сохраняется высокая скорость загрузки сайта за счёт нормальной работы браузерного кэша.

Итог: обычная замена изображения на сервере теперь автоматически
приводит к его обновлению у посетителей сайта. Самописный модуль OpenCart 3
самостоятельно контролирует актуальность превью и полноразмерных изображений,
а владельцу сайта больше не нужно вручную заниматься очисткой и обновлением кэша.

Есть похожая задача?

Пришлите ссылку на сайт и опишите желаемый результат.

Обсудить в Telegram