Messages and Global Messages Blocks

Both use the same block, as we can see in page.xml:

<block type="core/messages" name="global_messages" as="global_messages"/>
<block type="core/messages" name="messages" as="messages"/>

When you add a message, you add it to the session, rather than to either of the
messages blocks, so the code below causes the Mage_Customer_Model_Session object
to have an error logged to it:

Mage::getSingleton('customer/session')->addError('Please enter all required information');

At this point neither message blocks know anything about the message, this is
where the difference between the global messages and the messages block comes
in - it's purely down to what gets inserted into the relevant message block.

For the global messages block, I'm not sure how it gets filled actually, I can't
find any reference in the code at all to something interacting with the block.

For the messages block, it gets filled by you using _initLayoutMessages() from
your controller, like so:

$this->_initLayoutMessages('customer/sesssion');

What this does is basically the following, which is a simplification from
Mage_Core_Controller_Varien_Action::_initLayoutMessages():

$storage = Mage::getSingleton('customer/sesssion');
$block = $this->getLayout()->getMessagesBlock();
$block->addMessages($storage->getMessages(true));

A side note - the Magento templates use this method call to render the message
block:

$this->getMessagesBlock()->getGroupedHtml();

This stops the Enterprise Full Page Cache from working, instead this should be
used:

$this->getMessagesBlock()->toHtml();

In summary - it looks like the global messages block is not used at all. If
anyone knows any better, let me know!

Mike Whitby Over 11 years ago