¿Hay alguna forma de establecer un tema diferente depende del grupo de clientes?

8

Quiero mostrar un tema diferente según el grupo de clientes. ¿Hay alguna forma de configurar un tema diferente de forma dinámica?

Por ejemplo: Tema A para el grupo de clientes General y Tema B para el grupo de clientes Mayoristas.

Gracias por adelantado

Bijal Bhavsar
fuente

Respuestas:

17

La forma rápida y fea es verificar el grupo del cliente actual y luego configurar el tema mediante programación:

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

Pero esta solución definitivamente pierde algo de flexibilidad.

La forma más sofisticada sería crear un diseño de grupo de clientes y luego configurar temas personalizados allí. Esta solución está inspirada en este artículo de Atwix.

Entonces, primero debes observar el 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>

Luego, en su clase de observador, implemente el 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: str_replaceAquí no es infalible, así que sugiero reemplazarlo con una expresión regular que reemplace todos los caracteres no alfanuméricos con guiones bajos y luego recorte los guiones bajos iniciales y finales.

Así que ahora puede configurar un tema personalizado para cualquier grupo de clientes a través de 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>
usuario487772
fuente
4

Esto es más una adición a la respuesta de Tim. Puede crear secciones de configuración para cada grupo de clientes y establecer los valores para los temas allí. De esta manera, no tiene que codificar los nombres de los grupos de clientes y no tiene que cambiar el código cada vez que agrega un nuevo grupo.
Aquí hay un ejemplo de cómo puede agregar campos de configuración dinámica . Implica crear un nuevo procesador para un grupo de sección de configuración.
Combinando en un observador esto con lo que Tim sugirió:

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

debería obtener el resultado deseado.

Marius
fuente