Drupal, Ubercart, корзина и кеширование для анонимов

При выключенном кешировании аноним видит корзину как положено
При включенном кешировании и анониме с uid 0 корзина всегда показывается ссылкой
При включенном кешировании и анониме не 0 поведение корзины довольно непредсказуемо

Отключать кеш – не самая лучшая идея, не говоря уже о том, чтобы boost включить
вскрытие уберкарта показало, что uid 0 используется явно(кто бы сомневался) поэтому не 0 даёт такой результат

для начала запрещаем выдачу корзины анониму ссылкой
uc_cart.module

    case 'view':
      // 0 = Default shopping cart block.
      if ($delta == 0) {
        $cachable = 0;

потом ставим модуль ajaxblocks и выводим блок корзины через него

теперь можно смело включать кеширование или даже ставить boost
uc_ajax_cart работает так же отлично

единственный минус – +1 асинхронный запрос к серверу, что при включенном бусте нивелируется полностью

UPDATE 0

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

и вариант для джедаев – написать свой модуль/php-код, который выводит блок правильно, можно даже сразу с аякс

также можно попросить разработчиков уберкарт вычислять $cachable с учётом флага админки, но когда это будет?

если активно кешировать, я не вижу способов обойтись без аякс

UPDATE 1
с мест подсказывают, uid анонима должен быть 0 всегда, при любых обстоятельствах, иначе поведение модулей, его проверяющих, может стать непредсказуемым
но случается, что при выливке дампа его срывает – причины лично для меня непонятные, исправляю специально для этого сделанным sql

UPDATE 2

с мест подсказывают, uc_ajax_cart 2.x-beta версии делает всё самостоятельно
если вы не боитесь, то можно использовать его

Источник: http://www.drupal.ru/node/60318

Добавить комментарий к записи "Drupal, Ubercart, корзина и кеширование для анонимов"

Чтобы комментировать, необходимо войти в систему.

© 2009 Обзор CMS