Der schnelle und hässliche Weg besteht darin, die aktuelle Kundengruppe zu überprüfen und das Thema dann programmgesteuert festzulegen:
Mage::getDesign()->setArea('frontend')
->setPackageName('your_package')
->setTheme('your_theme');
Bei dieser Lösung fehlt jedoch definitiv eine gewisse Flexibilität.
Der komplexere Weg wäre, ein Kundengruppen-Layout zu erstellen und dort benutzerdefinierte Themen festzulegen. Diese Lösung ist von diesem Artikel von Atwix inspiriert .
Also muss man zuerst das controller_action_layout_load_before
Ereignis beobachten :
<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>
Dann implementieren Sie in Ihrer Beobachterklasse die addCustomerGroupHandle
Methode:
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;
}
Hinweis: Das str_replace
hier ist nicht narrensicher, daher empfehle ich, es durch einen regulären Ausdruck zu ersetzen, der alle nicht alphanumerischen Zeichen durch Unterstriche ersetzt und dann führende und nachfolgende Unterstriche abschneidet.
Jetzt können Sie über XML ein benutzerdefiniertes Thema für jede Kundengruppe festlegen:
<?xml version="1.0" encoding="UTF-8"?>
<layout>
<customer_group_wholesale>
<reference name=”root”>
<action method=”setTheme”><theme>modern</theme></action>
</reference>
</customer_group_wholesale>
</layout>