Magento Don't Cache Alerts - PullRequest
       8

Magento Don't Cache Alerts

0 голосов
/ 09 ноября 2011

Я установил это расширение в своем магазине Magento: http://www.magentocommerce.com/magento-connect/catalogcache.html

Это действительно улучшило время загрузки страницы для списков каталога.Проблема в том, что оповещения больше не отображаются.Например, если кто-то подписывается, чтобы получать уведомление, когда товар возвращается на склад, на странице перезагрузки появляется сообщение «Предупреждение успешно добавлено».

Кто-нибудь знает, как я могу предотвратить кэширование предупреждений?

Вот код расширения:

    class Netresearch_CatalogCache_Block_Product_View extends Mage_Catalog_Block_Product_View
/**
 * replace this parent class by your inhereted version of th Product_View Block
 * e.g. class Netresearch_CatalogCache_Block_Product extends MyNameSpace_MyModule_Catalog_Block_Product_View
 */
{
    protected function _isCacheActive()
    {
        if(!Mage::getStoreConfig('catalog/frontend/cache_view')) {
            return false;
        }

        /* if there are any messages dont read from cache to show them */
        if(Mage::getSingleton('core/session')->getMessages(true)->count() > 0) {
            return false;
        }


        return true;
    }

    public function getCacheLifetime()
    {
        if($this->_isCacheActive())
        {
            return false;
        }
    }
/*
    protected function _loadCache()
    {
        $cache = parent::_loadCache();
        Mage::debug($cache===false? "computed":"from cache");
        return $cache;
    }
*/
    public function getCacheKey()
    {
        if(!$this->_isCacheActive()) {
            parent::getCacheKey();
        }
        $_taxCalculator = Mage::getModel('tax/calculation');
        $_customer = Mage::getSingleton('customer/session')->getCustomer();
        $_product = $this->getProduct();
        return 'ProductView'.
            /* Create differnet caches for ...
             * ... for different products */
            $_product->getId().'_'.
            /* ... for different stores */
            Mage::App()->getStore()->getCode().'_'.
            /* ... for different customer groups */
            $_customer->getGroupId().'_'.
      /* ADD CURRENCY CODE TO ID */
      Mage::app()->getStore()->getCurrentCurrencyCode().'_'.
            /* ... for different tax classes (related to customer and product) */
            $_taxCalculator->getRate(
                $_taxCalculator
                    ->getRateRequest()
                    ->setProductClassId($_product->getTaxClassId()
                )
            ).'_'.
            '';
    }


    public function getCacheTags()
    {
        if(!$this->_isCacheActive()) {
            return parent::getCacheTags();
        }
        return array(
            Mage_Catalog_Model_Product::CACHE_TAG,
            Mage_Catalog_Model_Product::CACHE_TAG."_".$this->getProduct()->getId()
        );

    }
}

Я задал похожий вопрос о валюте магазина и получил решение: Magento - не кешировать валюту

Ответы [ 3 ]

1 голос
/ 11 ноября 2011

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

protected function _isCacheActive()
{
    if(!Mage::getStoreConfig('catalog/frontend/cache_view')) {
        return false;
    }

    /* if there are any messages dont read from cache to show them */
    if($this->getMessagesBlock()->getGroupedHtml()) {
        return false;
    }


    return true;
}
0 голосов
/ 18 ноября 2011

На самом деле, как только кто-то добавляет в корзину, мой кэш очищается.При дальнейшем расследовании я обнаружил, что для «Mage_Core_Block_Template» по умолчанию используется CACHE_GROUP = «block_html», который является родительским классом для Mage_Core_Block_Product_view.Следовательно, при создании любой корзины block_html удаляется из magento, и это не решает проблему.

Правильно ли я понимаю или я что-то упустил?

0 голосов
/ 10 ноября 2011

Кажется, что он проверяет Mage::getSingleton('core/session') на наличие доступных сообщений, скорее всего, модуль новостной рассылки записывает сообщения в Mage::getSingleton('customer/session'), поэтому его тоже нужно проверить

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