Как обслуживать разные кэшированные версии страницы в зависимости от файла cookie в Drupal? - PullRequest
2 голосов
/ 24 августа 2010

Задача относительно проста:

Сайт Drupal отображает список статей с миниатюрами. Некоторые посетители хотели бы просмотреть его без изображений, нажав на кнопку / ссылку и сохранив это предпочтение.

например. http://patterntap.com/collections/index/

alt text

Проблема в том, что все посетители являются анонимными и имеют определенный трафик, кеш страниц включен.

Моя идея заключалась в том, чтобы использовать простой JavaScript для установки cookie, обновления страницы и в зависимости от значений cookie (или их наличия / отсутствия) отображать или скрывать изображения.

За исключением того, что Drupal обслуживает кэшированные страницы довольно рано, и единственный быстрый способ изменить кэшированную версию, которую я смог найти, - это взломать include / bootstrap.inc и добавить собственный класс в классы тела, а затем скрыть изображения с помощью css.

Очень неправильный подход, я знаю. Но мне интересно, есть ли способ сохранить разные версии страницы и предоставить правильную версию?

Edit:

  • нужно сохранить тот же URI
  • JS, чтобы показать / скрыть изображения без перезагрузки и установить cookie, уже на месте
  • hook_boot() на самом деле не вызывается для кэшированных страниц, поэтому не может сделать это через пользовательский модуль
  • .htaccess модов?

Редактировать / решение: В конце концов пошел с предложением Римиана. Но выполнить задачу можно с помощью нашей собственной реализации cache.inc, как показано в модуле Mobile Tools . В частности, путем расширения cache.inc и обновления settings.php для включения

$conf['page_cache_fastpath'] = FALSE;
$conf['cache_inc'] = 'path/to/my/module/my_module_cache.inc';

Ответы [ 2 ]

1 голос
/ 25 августа 2010

Я не уверен, что на 100% понимаю, что вы пытаетесь сделать, но вот мои мысли.Одна из ваших основных проблем заключается в том, что вы пытаетесь получить доступ к тому, что по сути отличается от контента, в одном и том же URI.

Если это действительно то, что вы хотите сделать, то предложение Римиана о проверке chache_get и chache_set может быть полезным.

Лично мне кажется чище иметь ваши "с эскизами" и"без миниатюр" доступны через различные URI.В зависимости от того, чего именно вы хотите достичь, переменная GET может стать еще лучшим способом.С помощью любого из этих двух вариантов вы можете скрыть или показать свои эскизы на слое темы.Страницы с разными путями или переменными get будут кэшироваться отдельно.

Если вы хотите, чтобы посетитель мог переключать просмотры без перезагрузки страницы, тогда jQuery и cookie, вероятно, подойдут вам.Это не потребует перезагрузки страницы, и переключение туда-сюда будет довольно простым.

1 голос
/ 25 августа 2010

Итак, позвольте мне сделать это правильно. Вы хотите скрыть некоторые изображения на кэшированной странице, если пользователь выберет?

Почему бы вам не написать jQuery или javascript и загрузить их на свою кэшированную страницу со всем остальным документом?

Тогда клиент / браузер решит запустить ваш скрипт и скрыть изображения в зависимости от некоторых параметров, которые вы передали вместе с запросом на эту страницу или в cookie? Сценарий кэшируется и запускается только при его вызове.

Если бы вы взламывали бутстрап для чего-то подобного, вам действительно нужно переосмыслить то, что вы делали. Псих! :)

Также взгляните на cache_get и cache_set:

http://api.drupal.org/api/drupal/includes--cache.inc/6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...