C'è un modo per impostare temi diversi a seconda del gruppo di clienti?


8

Voglio mostrare temi diversi a seconda del gruppo di clienti. Esiste un modo per impostare temi diversi in modo dinamico?

Ad esempio: tema A per il gruppo di clienti generali e tema B per il gruppo di clienti all'ingrosso.

Grazie in anticipo

Risposte:


17

Il modo rapido e brutto è controllare il gruppo del cliente corrente e quindi impostare il tema in modo programmatico:

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

Ma questa soluzione manca sicuramente un po 'di flessibilità.

Il modo più sofisticato sarebbe quello di creare handel di layout di un gruppo di clienti e quindi impostare temi personalizzati lì. Questa soluzione è ispirata a questo articolo di Atwix.

Quindi prima devi osservare l' controller_action_layout_load_beforeevento:

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

Quindi nella tua classe di osservatori implementa il addCustomerGroupHandlemetodo:

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;
}

Nota: il str_replacequi non è infallibile, quindi suggerisco di sostituirlo con un'espressione regolare che sostituirà tutti i caratteri non alfanumerici con caratteri di sottolineatura e quindi taglierà i caratteri di sottolineatura iniziali e finali.

Quindi ora puoi impostare un tema personalizzato per qualsiasi gruppo di clienti tramite 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

Questa è più un'aggiunta alla risposta di Tim. È possibile creare sezioni di configurazione per ciascun gruppo di clienti e impostare i valori per i temi presenti. In questo modo non è necessario codificare i nomi dei gruppi di clienti e non è necessario modificarli ogni volta che si aggiunge un nuovo gruppo.
Ecco un esempio di come è possibile aggiungere campi di configurazione dinamici . Implica la creazione di un nuovo renderer per un gruppo di sezioni di configurazione.
Combinando in un osservatore questo con ciò che Tim ha suggerito:

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

dovrebbe ottenere il risultato desiderato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.