Кеширование картинок из настроек тем дизайна

Алексей Александрович

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

Картинки загруженные через Магазин-Товары-Промо в url добавляют некий хеш ?v=1512231726, это необходимо добавить и картинкам загруженным через настройки тем. При этом если посмотреть код загруженных картинок в самих настройках - там этот хеш есть. А вот при выводе во frontend - уже нет.

30 октября 2018
  • replicant 30 октября 2018 13:04

    Если использовать переменную {$promo.image} для вывода изображения промо-карточек, то там уже содержится нужный ?v=unixtimestamp, а не хеш.



    Промо-карточки имеют свои id. При смене картинки на конкретной карточке имя файла изображения не меняется. Допустим для карточки id=2 все загруженные для неё изображения в формате jpg будут иметь имя 2.jpg. Поэтому после имени файла добавляется уникальный временной штамп, чтобы браузер адекватно отображал новую картинку, а не тянул из кеша старую с тем же именем. По такой же схеме работают ?v{$wa_theme_version} для css и js при правках кода, чтобы избежать проблем с кешированием.

    Остальное зависит от настроек вашей темы дизайна. Всякие блоки с картинками и т.п. есть далеко не в каждой теме дизайна. Возможно даже стоит обратиться к разработчику темы дизайна с этим вопросом.
  • Алексей Александрович 30 октября 2018 13:09

    ?v{$wa_theme_version} подходит для CSS и JS, т.к. они меняются действительно только с версией темы дизайна. Для картинок это не подходит. Значит там тоже нужен ?v=unixtimestamp

  • replicant 30 октября 2018 13:17

    Они меняются ещё с каждым сохранением js или css файла и ?v1.1.0.2574 - это будет правка номер 2574 для темы версии 1.1.0. Однако суть не в этом. Ваш вопрос, наверное, следует отнести к конкретной теме дизайна и о том как именно добавить к тому, что вы хотите, метку времени unix или иную уникальную метку как в случае с правкой js или css, чтобы браузер не показывал кешированное изображение.

  • Алексей Александрович 30 октября 2018 13:21

    Проверил специально только что - не меняется ?v{$wa_theme_version} при загрузке нового файла.

  • replicant 30 октября 2018 13:25

    ?v{$wa_theme_version} относится к правке через редактор шаблонов темы дизайна для js и css.

    К вашему случаю с изображениями это отношения не имеет.

  • Алексей Александрович 30 октября 2018 13:26

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

  • replicant 30 октября 2018 13:28

    Я вам уже дважды вообще-то ответил на вопрос разными словами, но вы не хотите видеть ответ.

    К разработчику темы дизайна попробуйте обратиться.

  • Алексей Александрович 30 октября 2018 13:32

    (facepalm) Причем тут разработчик темы?)))))

  • Алексей Webasyst 30 октября 2018 13:46

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

  • Алексей Webasyst 30 октября 2018 13:58

    Уточнение картинки из кэша отображаются в разделе настроек?
    Или на витрине?

    Если в разделе настроек, то скоро планируется их обновление.
    Если на витрине, то можете добавить доп параметр или проверку на режим отладки.

  • Алексей Александрович 30 октября 2018 14:25

    Добрый день, Алексей. Я про витрину магазина, в настройках меняются изображения нормально. При этом да, действильно, если загрузить новую картинку, то timestamp меняется, но почему-то не для всех картинок. Для логотипа в темах меняется, для других картинок почему-то нет. Пока не разобрался в чем причина. 

  • Алексей Александрович 30 октября 2018 14:56

    В общем, кажется, разобрался в чем тут дело. Если, например, в настройках приложения Сайт мы загружаем картинку, то в файле, который принадлежит этому же приложению, мы её выведем вот так {$wa_theme_url}{$theme_settings.logo}?v{$wa_theme_version}, то v{$wa_theme_version} обновится и картинка тоже. 

    Но если мы выведем эту картинку из файла для приложения магазин {$wa_parent_theme_url}{$theme_settings.logo}?v{$wa_theme_version}, то картинка не обновится, как и v{$wa_theme_version}, т.к. видимо версия берется с магазинной темы.

    Вот в этом и проблема...

  • Алексей Александрович 30 октября 2018 16:48

    Для решения данной проблемы можно использовать ?v={wa_date('timestamp')}

  • Дмитрий Елшин Webasyst 30 октября 2018 18:40

    Можно использовать просто {time()}.

    Другое дело, что при каждой загрузке страницы с такой картинкой — браузер будет загружать её с сервера целиком.

    В ближайшем обновлении Фреймворка мы будем добавлять актуальный timestamp во время загрузки изображений к названию файла прямо в theme.xml, так что вам не нужно будет беспокоиться об этом.

  • Алексей Александрович 30 октября 2018 20:14

    Супер. Но я точно могу вам доверять?! У вас нет бейджика Webasyst =)

  • Дмитрий Елшин Webasyst 30 октября 2018 20:31

    Теперь есть. Выходит можно доверять. :)

  • Алексей Александрович 30 октября 2018 20:35

    Спасибо! =)



Чтобы добавить комментарий, зарегистрируйтесь или войдите