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

Сентябрь 17, 2010 г.

Система меню в друпале сделана правильно и в большинстве случаев не требует установки каких то дополнительных модулей, чтобы получить тот результат, который требуется. И в данной статье мы не будем как то дополнять саму систему меню drupal-а. В тоже ...

Читать

Программно удаляем тип публикации в Drupal

Март 15, 2018 г.

Всё, что вы можете сделать из админки, может быть сделано программно. Удаление типа публикации в Drupal тоже можно сделать из кода на PHP. Перед тем как удалить тип публикации, возможно, стоит подчистить экземпляры нод данного типа. Потому сначала ...

Читать

Программный вывод блока в Drupal 9

Август 31, 2021 г.

Рассмотрим пару кейсов, того как рендерить блок из вашего кода. Блок существует как Entity Вы создали произвольный блок через Manage->Structure->Block ...

Читать

Что использовать вместо mysql_escape_string() в Drupal 7?

Сентябрь 6, 2016 г.

Начиная с версии PHP 4.3.0, функция mysql_escape_string() считается устаревшей. PHP будет выдавать соответствующее предупреждение. Deprecated function: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. Т.е. ...

Читать
 

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

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



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