Добавляем параметр к картинкам в Drupal, для преодоления кеширования со стороны браузера

У картинок, к которым применены стили, уже есть один параметр — это itok. Он появился в 7ке для уменьшения возможностей проведения DDoS атак на ваш Drupal сайт.

СЕО-шникам он не нравится, и иногда они просят его отключить. Как отключить ITOK читайте вот тут. Так что добавление ещё одного параметра им точно не понравится. Хотя в robots.txt всегда можно настроить какие параметры робот должен пропускать, потому не вижу в этом особой проблемы.

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

Если изображение изменилось, но его название (url) осталось прежним, то браузер скорее всего не будет его запрашивать повторно. К примеру, так происходит при использовании модуля imagefield_crop.

В некоторых случаях бразуер все же делает запрос на сервер, а сервер может ответить, что файл не менялся (304 код). В таком случае, картинка также будет взята из кеша на стороне клиента. Но в данном случае — все будет так, как и должно быть.

Как заставить браузер прочитать изображение вновь?

Вот для этого нам и нужен ещё один параметр. Мы не можем менять itok, так как он генерируется системой на основе названия стиля изображения и uri картинки. А если адрес и стиль не менялись — то itok останется прежним.

Добавляем параметр в адрес картинки.

Итак, как нам добавить параметр в адрес картинки? Есть несколько путей, каждый со своими особенностями. Самый простой — изменить адрес непосредственно в шаблоне. Его я рассматривать не буду, т.к. он прост, но не очень удобен, в особенности, для уже собранных проектов.

Использование hook_file_url_alter().

Данный хук цепляется за все вычисления url, который производит движок drupal. Потому вызываться он будет десятки раз за время построения страницы, для js и css файлов, в том числе.

Нужно отделить «зерна» от «плевел»:

Если использовать значение параметра как в примере, то вы совсем отключите кеширование изображений в браузере. Это может существенно увеличить нагрузку на ваш сервер. На практике такое значение не используют.

Использование переопределения theme_image функции.

Этот подход гораздо точнее локализует задачу. Если вы идете «путями drupal», то ничего более и не потребуется.

Тоже самое можно сделать и для других theme функций, вот пример для theme_image_url_formatter(), если вы используете соответствующий сторонний модуль:

Вместо функции time() разумно использовать timestamp последней модификации файла. Вам может понадобится вариант filemtime, который работает с URL, а не именем файла.

Мало букафф? Читайте есчо !

Перевод месяцев formatted datetime в Drupal

Март 8, 2024 г.

Недавно изучал вопрос: как правильно переводить месяцы (в коротком и длинном варианте) в полях типа datetime в Drupal. Короткий ответ - через UI translation. ...

Читать

Загрузка файла через форму в Drupal

Май 19, 2023 г.

Посмотрим как получить непосредственный доступ к файлу без загрузки файла в хранилище, при его загрузке в поле типа "file" Form API. Много гайдов посвящено тому как использовать поле managed_file, а для unmanaged случая считается, что разработчик ...

Читать

Цепляем js-скрипт после ajax-вызова в Drupal 7

Май 5, 2017 г.

После выполнения загрузки данных по ajax, может потребоваться инициализация скриптов для только что полученного куска HTML. Как данный механизм реализован в Drupal 7? По большому счету, требуется добавить js код в секцию success после вызова ...

Читать

Удаление неиспользуемых файлов в Drupal

Октябрь 17, 2024 г.

Особенно полезно, когда вы использовали проект как шаблон для другого сайта и надо почистить данные. Друпал хоть и показывает статистику использования файлов, но удалять файлы не позволяет из реестра /admin/content/files. Напишем небольшой скрипт, ...

Читать
 

Комментарии к «Добавляем параметр к картинкам в Drupal, для преодоления кеширования со стороны браузера»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: