/** * Prepare response body before caching * * @param Zend_Controller_Response_Http $response * @return string */ public function prepareContent(Zend_Controller_Response_Http $response) { $cacheInstance = Ves_Optimize_Model_Cache::getCacheInstance(); /** @var Ves_Optimize_Model_Processor */ $processor = Mage::getSingleton('ves_optimize/processor'); $countLimit = Mage::getStoreConfig(Mage_Reports_Block_Product_Viewed::XML_PATH_RECENTLY_VIEWED_COUNT); // save recently viewed product count limit $cacheId = $processor->getRecentlyViewedCountCacheId(); if (!$cacheInstance->getFrontend()->test($cacheId)) { $cacheInstance->save($countLimit, $cacheId, array(Ves_Optimize_Model_Processor::CACHE_TAG)); } // save current product id $product = Mage::registry('current_product'); if ($product) { $cacheId = $processor->getRequestCacheId() . '_current_product_id'; $cacheInstance->save($product->getId(), $cacheId, array(Ves_Optimize_Model_Processor::CACHE_TAG)); $processor->setMetadata(self::METADATA_PRODUCT_ID, $product->getId()); Ves_Optimize_Model_Cookie::registerViewedProducts($product->getId(), $countLimit); } return parent::prepareContent($response); }
/** * Remove customer cookie * * @param Varien_Event_Observer $observer * @return Ves_Optimize_Model_Observer */ public function customerLogout(Varien_Event_Observer $observer) { if (!$this->isCacheEnabled()) { return $this; } $this->_getCookie()->updateCustomerCookies(); if (!$this->_getCookie()->get(Ves_Optimize_Model_Cookie::COOKIE_CUSTOMER)) { $this->_getCookie()->delete(Ves_Optimize_Model_Cookie::COOKIE_RECENTLY_COMPARED); $this->_getCookie()->delete(Ves_Optimize_Model_Cookie::COOKIE_COMPARE_LIST); Ves_Optimize_Model_Cookie::registerViewedProducts(array(), 0, false); } return $this; }
/** * Get page content from cache storage * * @param string $content * @return string|false */ public function extractContent($content) { $cacheInstance = Ves_Optimize_Model_Cache::getCacheInstance(); /* * Apply design change */ $designChange = $cacheInstance->load($this->getRequestCacheId() . self::DESIGN_CHANGE_CACHE_SUFFIX); if ($designChange) { $designChange = unserialize($designChange); if (is_array($designChange) && isset($designChange['package']) && isset($designChange['theme'])) { $designPackage = Mage::getSingleton('core/design_package'); $designPackage->setPackageName($designChange['package'])->setTheme($designChange['theme']); } } if (!$this->_designExceptionExistsInCache) { //no design exception value - error //must be at least empty value return false; } if (!$content && $this->isAllowed()) { $subprocessorClass = $this->getMetadata('cache_subprocessor'); if (!$subprocessorClass) { return $content; } /* * @var Ves_Optimize_Model_Processor_Default */ $subprocessor = new $subprocessorClass(); $this->setSubprocessor($subprocessor); $cacheId = $this->prepareCacheId($subprocessor->getPageIdWithoutApp($this)); $content = $cacheInstance->load($cacheId); if ($content) { if (function_exists('gzuncompress')) { $content = gzuncompress($content); } $content = $this->_processContent($content); // restore response headers $responseHeaders = $this->getMetadata('response_headers'); if (is_array($responseHeaders)) { foreach ($responseHeaders as $header) { Mage::app()->getResponse()->setHeader($header['name'], $header['value'], $header['replace']); } } // renew recently viewed products $productId = $cacheInstance->load($this->getRequestCacheId() . '_current_product_id'); $countLimit = $cacheInstance->load($this->getRecentlyViewedCountCacheId()); if ($productId && $countLimit) { Ves_Optimize_Model_Cookie::registerViewedProducts($productId, $countLimit); } } } return $content; }