Existe alguma maneira de definir um tema diferente depende do grupo de clientes?

8

Quero mostrar que o tema diferente depende do grupo de clientes. Existe alguma maneira de definir temas diferentes dinamicamente?

Por exemplo: Tema A para grupo de clientes Geral e Tema B para grupo de clientes Atacado.

desde já, obrigado

Bijal Bhavsar
fonte

Respostas:

17

A maneira mais rápida e feia é verificar o grupo de clientes atual e definir o tema programaticamente:

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

Mas esta solução definitivamente perde alguma flexibilidade.

A maneira mais sofisticada seria criar handels de layout de grupo de clientes e definir temas personalizados lá. Esta solução é inspirada neste artigo da Atwix.

Então, primeiro você deve observar o 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>

Em seguida, na sua classe de observador, implemente o addCustomerGroupHandlemétodo:

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: O str_replaceaqui não é infalível, por isso sugiro substituí-lo por uma expressão regular que substitua todos os caracteres não alfanuméricos por sublinhados e apare os sublinhados iniciais e finais.

Portanto, agora você pode definir um tema personalizado para qualquer grupo de clientes através do 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>
user487772
fonte
4

Isso é mais um acréscimo à resposta de Tim. Você pode criar seções de configuração para cada grupo de clientes e definir os valores para os temas. Dessa forma, você não precisa codificar os nomes dos grupos de clientes e não precisa alterar o código toda vez que adicionar um novo grupo.
Aqui está um exemplo de como você pode adicionar campos de configuração dinâmicos . Envolve a criação de um novo renderizador para um grupo de seções de configuração.
Combinando isso em um observador com o que Tim sugeriu:

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

deve obter o resultado desejado.

Marius
fonte