Existe-t-il un moyen de définir un thème différent en fonction du groupe de clients?


8

Je souhaite afficher un thème différent en fonction du groupe de clients. Existe-t-il un moyen de définir un thème différent de manière dynamique?

Par exemple: Thème A pour le groupe de clients général et Thème B pour le groupe de clients de gros.

Merci d'avance

Réponses:


17

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 addCustomerGroupHandlemé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_replaceici 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>

4

C'est plus 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 des thèmes qui s'y trouvent. De cette façon, vous n'avez pas à coder en dur les noms des groupes de clients et vous n'avez pas à modifier le code chaque fois que vous ajoutez un nouveau groupe.
Voici un exemple de la façon dont vous pouvez ajouter des champs de configuration dynamiques . Il s'agit de créer un nouveau rendu pour un groupe de sections de configuration.
Combinant cela en observateur avec ce que Tim a suggéré:

Mage::getDesign()->setArea('frontend')
    ->setPackageName('your_package')
    ->setTheme('your_theme');

devrait obtenir le résultat souhaité.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.