Est-il possible de définir un thème différent sur le groupe dépend de la clientèle?
Question
Je veux montrer un thème différent dépend de la clientèle group.Is il possible de définir un thème différent dynamiquement?
Ex .: Thème A pour le groupe de clients général et le thème B pour le groupe de clients en gros.
Merci à l'avance
La solution
La façon rapide et laid est de vérifier le groupe du client actuel, puis définir le thème programatically:
Mage::getDesign()->setArea('frontend')
->setPackageName('your_package')
->setTheme('your_theme');
Mais cette solution manque certainement une certaine flexibilité.
La façon plus sophistiquée serait de créer une mise en page du groupe client Handels puis thèmes set personnalisés là. Cette solution est inspirée par cet article par Atwix.
Alors vous devez d'abord observer événement controller_action_layout_load_before
:
<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 mettre en œuvre la méthode de addCustomerGroupHandle
:
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;
}
Note:. Le str_replace
est ici pas à toute épreuve, donc je vous suggère de le remplacer par une expression régulière qui remplacera tous les caractères non alphanumériques avec underscores puis couper avant et arrière underscores
Alors maintenant, vous pouvez définir un thème personnalisé pour tout groupe de clients par 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>
Autres conseils
Ceci est plus d'un ajout à la réponse de Tim. Vous pouvez créer des sections de configuration pour chaque groupe de clients et définir les valeurs pour les thèmes là-dedans. De cette façon, vous ne devez pas coder en dur les noms des groupes de clients et vous ne devez pas modifier le code à chaque fois que vous ajoutez un nouveau groupe.
Voici un exemple de la façon dont vous pouvez ajouter config dynamique champs . Il implique la création d'un nouveau moteur de rendu pour un groupe de section de configuration.
La combinaison d'un observateur cela avec ce que Tim a suggéré:
Mage::getDesign()->setArea('frontend')
->setPackageName('your_package')
->setTheme('your_theme');
devrait obtenir le résultat souhaité.