Автоматическое обновление изображений в 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
самостоятельно контролирует актуальность превью и полноразмерных изображений,
а владельцу сайта больше не нужно вручную заниматься очисткой и обновлением кэша.