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

Était-ce utile?

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top