Добавляем параметр к картинкам в 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, а не именем файла.

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

Drupal migration из CSV файла

Март 1, 2024 г.

API миграции в Drupal позволяет "тащить" данные из разных источников, но работает это на базе контрибных модулей, т.е. не из коробки. Например, модуль migrate_source_csv добавляет возможность добавить CSV файл как источник данных. Создание каких ...

Читать

Корзина не пуста - изменим стиль пункта меню

Август 2, 2023 г.

Использую Drupal Commerce, и в меню у меня есть пункт "Корзина", со ссылкой на корзину пользователя. Хочется, чтобы стиль пункта меню менялся, если корзина не пуста. Я буду использовать hook_preprocess_menu темы, чтобы изменить нужный пункт меню ...

Читать

Кастомизация шаблона формы плагина webforms

Май 1, 2023 г.

Чтобы изменить штатный макет формы webform-submission-form.html.twig, требуется имплементация своего шаблона. Для начала определимся с именем шаблона. ...

Читать

Темизация существующей формы в Drupal

Март 26, 2016 г.

Form API в Drupal позволяет очень гибко работать с формами. Не важно где и в каком модуле была создана форма, вы всегда можете подключить собственный файл-шаблон или функцию темизации для модификации вывода этой формы. Как это сделать читайте далее. ...

Читать
 

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

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



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