Magento EE – display global messages when you have Full Page Cache turned on


Have you ever wanted to enable Magento global messages when you have Full Page Cache (FPC) turned on ? I wanted it, but after several hours of debugging and studying magento caching mechanism, i found it’s hard to punch a hole for Magento global message, i thought about an alternative solution – ignoring FPC when we have global message !

By default, when we add this GET parameter ‘?___store’ to request url, Magento will bypass caching and generate content from files, sessions and database for you. With this clue, we know what we need to do is to add ‘?___store’ parameter to redirect url so we can achieve our goal

In order to do that, you will need to override a controller that you want to display global message after have action in that controller done.

                         <Wagento_Custom before="Mage_Catalog">Wagento_Custom</Wagento_Custom>

Then you need to modify _redirectReferer function extended from Mage_Core_Controller_Varien_Action like this

/*include Mage_Catalog_Product_CompareController to extend it*/
require_once 'Mage/Catalog/controllers/Product/CompareController.php';

class Wagento_Custom_Product_CompareController extends Mage_Catalog_Product_CompareController
     protected function _redirectReferer()
        $refererUrl = $this->_getRefererUrl();
        if (empty($refererUrl)) {
            $refererUrl = empty($defaultUrl) ? Mage::getBaseUrl() : $defaultUrl;

          /*inject ignore global full page cache param*/
          if (!strpos($refererUrl, '?___store'))
               $refererUrl .= '?___store';
          /*end of hacking*/

          //parent::_redirectReferer($url); // call _redirectReferer from Mage_Core_Controller_Varien_Action
        return $this;

that’s it, we’ve done it in dirty way