I was wondering how Magento merge
I was expecting something like
<default> <update handle="customer_logged_in" if="logged_in"/> <update handle="customer_logged_out" if="logged_out"/> </default>
Obviously, there is not such codes in layouts.
I searched within Magento folder for keyword “customer_logged_in”, but only occurrences I could find in layout/customer.xml.
So, how is customer_logged_in/out handle added to Magento layout?
At last, I found
class Mage_Customer_Model_Observer { public function beforeLoadLayout($observer) { $loggedIn = Mage::getSingleton('customer/session')->isLoggedIn(); $observer->getEvent()->getLayout()->getUpdate() ->addHandle('customer_logged_'.($loggedIn?'in':'out')); } }
by tracing addHandle() in app/core/Mage/Core/Model/Layout/Update.php.
I must say using observer adding layout handle makes very easy for other modules to detect customer login status.