Le moyen rapide et laid est de vérifier le groupe du client actuel, puis de définir le thème par programme:
Mage::getDesign()->setArea('frontend')
->setPackageName('your_package')
->setTheme('your_theme');
Mais cette solution manque définitivement de flexibilité.
La manière la plus sophistiquée serait de créer un handels de mise en page de groupe de clients, puis d'y définir des thèmes personnalisés. Cette solution est inspirée de cet article d'Atwix.
Vous devez donc d'abord observer l' controller_action_layout_load_before
événement:
<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>
Ensuite, dans votre classe d'observateur, implémentez la addCustomerGroupHandle
méthode:
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;
}
Remarque: l' str_replace
ici n'est pas infaillible, je suggère donc de le remplacer par une expression régulière qui remplacera tous les caractères non alphanumériques par des traits de soulignement, puis coupera les traits de soulignement de début et de fin.
Alors maintenant, vous pouvez définir un thème personnalisé pour n'importe quel groupe de clients via xml:
<?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>