Кэширование Drupal предотвращает чтение файлов cookie


На одном из моих производственных сайтов я написал переключатель таблиц стилей jQuery. Он удаляет файл cookie при выборе и использует php для выбора соответствующей таблицы стилей в загрузке страниц, которая переопределяет стили. Все замечательно, пока я не включу режим кэширования производительности, в котором файл cookie игнорируется при каждой загрузке страницы. Очевидно, что это не желаемый эффект, и я понимаю, почему это происходит: страницы кэшируются и больше не являются по-настоящему динамичными в отношении загрузки того, что рассматривается как "динамически" меняющаяся таблица стилей. Вы можете изменить таблицу стилей, однако при возвращении на страницу применяется первоначальный стиль. Просто для справки я закодировал php в каждый шаблон страницы (page-front.tpl.php и page.tpl.php ) и javascript находится в моем scripts.js . php - это в основном всего лишь пара операторов if else.

Из-за большого объема трафика мне приходится включать кэширование на сайте, однако в идеале хотелось бы сохранить этот переключатель стилей функциональность. Есть ли способ сделать исключение из правила кэширования для этого или мне придется отключить переключатель? Поможет ли упаковка его в модуль?

Заранее спасибо:)

Author: kiamlaluno, 2011-03-07

3 answers

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

Я не пробовал этого, но должно быть возможно, чтобы ваш style.css был не фактическим файлом css, а обратным вызовом drupal, который возвращает стили на основе файла cookie. Вам нужно будет включить "таблицу стилей", как вы бы делали стили для IE. Вы не сможете кэшировать это, но если вам действительно нужна производительность, вы можете сделать это в файле php и пропустить загрузчик drupal.

Альтернативным вариантом было бы позволить js самому выполнять стили на основе файлов cookie.

Ни один из этих вариантов не идеален, но они должны работать.

 2
Author: googletorp, 2011-03-07 17:57:01

Можно ли создать только одну версию страницы? Включите ВСЕ стили на каждой странице (возможно, не идеальные, но не конец света, если они не огромны), а затем используйте JavaScript, чтобы, скажем, добавить класс тела в зависимости от значения файла cookie?

В качестве альтернативы мне нравится идея googletorp о том, что таблица стилей является обратным вызовом, а не файлом.css.

 2
Author: Chris Cohen, 2011-03-08 11:49:01

Использование файла cookie для выбора варианта cache_page с использованием memcache: http://drupal.org/node/942914 . Мы используем это для таргетинга GeoIP.

Использование файла cookie для выбора мобильной темы, если пользователь находится на мобильном устройстве: http://drupal.org/node/361832#comment-4110568 . Не используйте это, оказал некоторую помощь на одном из местных собраний Seadug.

 2
Author: mikeytown2, 2011-03-10 10:36:21