Pregunta

Quiero mostrar un tema diferente depende del grupo de clientes. ¿Hay alguna forma de establecer un tema diferente dinámicamente?

Para EG.: Tema A para el grupo de clientes general y el tema B para el grupo de clientes mayoristas.

Gracias por adelantado

¿Fue útil?

Solución

La forma rápida y fea es verificar el grupo actual del cliente y luego establecer el tema programáticamente:

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

Pero esta solución definitivamente pierde cierta flexibilidad.

La forma más sofisticada sería crear un grupo de clientes de diseño de un grupo de clientes y luego establecer temas personalizados allí. Esta solución se inspira en Este artículo por Atwix.

Así que primero tienes que observar controller_action_layout_load_before evento:

<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 implementa addCustomerGroupHandle mé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 la str_replace Aquí no es infalible, por lo que sugiero reemplazarlo con una expresión regular que reemplazará a todos los personajes no alfanuméricos con subrayos y luego recorte los subrayadores líderes y posteriores.

Por lo tanto, ahora puede establecer 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>

Otros consejos

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ámicos. Implica crear un nuevo renderizador para un grupo de secciones 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top