当我们需要能够轻松自定义页面样式或为客户组启用/禁用特定块时,最好在Magento中创建新的布局句柄。这是怎么回事。
这可以通过观察controller_action_layout_load_before事件来实现。在模块的config.xml中定义以下节点:
1 2 3 4 5 6 7 8 9 10 | <events> <controller_action_layout_load_before> <observers> <customer_group_handle> <class>module/observer</class> <method>addCustomerGroupHandle</method> </customer_group_handle> </observers> </controller_action_layout_load_before> </events> |
接下来,我们需要在模块Model / Observer.php文件中实现addCustomerGroupHandle方法。它看起来像:
1 2 3 4 5 6 7 8 9 10 11 12 | public function addCustomerGroupHandle(Varien_Event_Observer $observer) { if (Mage::helper('customer')->isLoggedIn()) { /** @var $update Mage_Core_Model_Layout_Update */ $update = $observer->getEvent()->getLayout()->getUpdate(); $groupId = Mage::helper('customer')->getCustomer()->getGroupId(); $groupName = Mage::getModel('customer/group')->load($groupId)->getCode(); $update->addHandle('customer_group_' . str_replace(' ', '_', strtolower($groupName))); } return $this; } |
这里我们用下划线替换空格,因为空格在xml节点中无效。如果组名中有任何其他无效字符,请注意。在添加布局句柄之前,您需要替换或删除它们。
当我们完成添加新句柄时,我们可以在local.xml或任何其他布局文件中使用它:
1 2 3 4 5 6 7 8 | <?xml version="1.0" encoding="UTF-8"?> <layout> <customer_group_wholesale> <reference name="head"> <action method="addItem"><type>skin_css</type><name>css/groups/wholesale.css</name></action> </reference> </customer_group_wholesale> </layout> |
希望本文对于为客户群定制布局有有用的见解。我很乐意听到您在开发中如何应用这些内容的任何评论。