Было бы неплохо использовать что-то вроде customer_logged_in
и customer_logged_out
, но, к сожалению, этого не существует ... пока.
Давайте скопируем ту же технику.Для начала вам нужно сделать модуль с этим в конфигурации:
<frontend>
<events>
<controller_action_layout_load_before>
<observers>
<customer_group_observer>
<class>CUSTOM_MODULE/observer</class>
<method>beforeLoadLayout</method>
</customer_group_observer>
</observers>
</controller_action_layout_load_before>
</events>
</frontend>
В классе CUSTOM_MODULE_Model_Observer
добавьте этот метод:
public function beforeLoadLayout($observer)
{
$groupId = Mage::getSingleton('customer/session')->getCustomerGroupId();
$group = Mage::getModel('customer/group')->load($groupId);
$observer->getEvent()->getLayout()->getUpdate()
->addHandle('customer_group_'.$group->getCode());
}
Теперь в файлах макета выможно использовать группы клиентов.
<layout>
<customer_group_General>
<reference name="content">
<!-- Add some blocks -->
</reference>
</customer_group_General>
</layout>
Кроме того, этот метод не позволяет вам напрямую указывать блоки на странице, но вы можете обойти это.Вот пример, который создает новое местоположение только для страниц продукта, на всех других страницах обновление не должно иметь никакого эффекта и завершаться неудачно.
<layout>
<catalog_product_view>
<reference name="content">
<block type="core/text_list" name="group_container" />
</reference>
</catalog_product_view>
<customer_group_General>
<reference name="group_container">
<!-- Add some blocks -->
</reference>
</customer_group_General>
</layout>