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

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

Убрать мета тег Generator

Май 17, 2023 г.

Выпиливаем мета-тег Generator из заголовочной секции сайта на Drupal. За одно и пару других лишних мета маркеров. Для этого используем hook_page_attachments_alter в теме оформления сайта. 'Generator' в списке мета информации идет под именем system_meta_generator. ...

Читать

Импортируем изображения через wysiwyg

Декабрь 27, 2014 г.

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

Читать

Настраиваем ЧПУ ссылки пейджера в Drupal 7

Июль 19, 2016 г.

Занимаюсь решением ряда SEO задач для сайта на Drupal. Одна из них связана с урлами, генерируемыми пейджером. На самом деле это комплекс задач, ...

Читать

Дополняем результаты views

Февраль 14, 2024 г.

Пример того, как можно дополнить результаты views в Drupal 9/10. Задача - вывести для статьи блок со связанными публикациями. В начале нужно было просто выводить последние статьи того же типа, а потом у заказчика возникло желание переопределять выдачу, ...

Читать
 

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

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



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