2011-08-19 16 views

Respuesta

16

Sería bueno usar algo como customer_logged_in y customer_logged_out pero lamentablemente eso no existe ... todavía.

Copiemos la misma técnica. Para empezar se necesita para hacer un módulo con esto en el config:

<frontend> 
    <events> 
     <controller_action_layout_load_before> 
      <observers> 
       <customer_group_observer> 
        <class>CUSTOM_MODULE/observer</class> 
        <method>beforeLoadLayout</method> 
       </customer_group_observer> 
      </observers> 
     </controller_action_layout_load_before> 
    </events> 
</frontend> 

En la clase CUSTOM_MODULE_Model_Observer añadir este método:

public function beforeLoadLayout($observer) 
{ 
    $groupId = Mage::getSingleton('customer/session')->getCustomerGroupId(); 
    $group = Mage::getModel('customer/group')->load($groupId); 

    $observer->getEvent()->getLayout()->getUpdate() 
     ->addHandle('customer_group_'.$group->getCode()); 
} 

Ahora en archivos de diseño se pueden utilizar los grupos de clientes.

<layout> 
    <customer_group_General> 
     <reference name="content"> 
      <!-- Add some blocks --> 
     </reference> 
    </customer_group_General> 
</layout> 

Además, este método no le permite especificar bloques directamente por página, pero puede solucionarlo. Aquí hay un ejemplo que crea una nueva ubicación para páginas de productos solamente, en todas las otras páginas la actualización no debería tener ningún efecto y fallar con elegancia.

<layout> 
    <catalog_product_view> 
     <reference name="content"> 
      <block type="core/text_list" name="group_container" /> 
     </reference> 
    </catalog_product_view> 

    <customer_group_General> 
     <reference name="group_container"> 
      <!-- Add some blocks --> 
     </reference> 
    </customer_group_General> 
</layout> 
+0

¡excelente respuesta! ¡Gracias por toda la ayuda! – veilig

+0

¿se pueden usar estos identificadores al dirigirse a una página específica? vs usado para cada página cuando un cliente es parte de un grupo en particular? – veilig

+0

Creo que tengo una idea de cómo hacerlo, por favor vea la respuesta actualizada. – clockworkgeek

0

El siguiente post proporcionará detalles de la funcionalidad de su requieren: http://www.magentocommerce.com/boards/viewthread/83244/#t219147

Uso customer_logged_in o customer_logged_out bloques en sus archivos de diseño para añadir o eliminar elementos, estos bloques se denominan pasado.

No es necesario agregar extensiones o códigos adicionales, esto está integrado en Magento como estándar.

Espero que esto ayude, funcionó para mí. Versión de Magento: 1.6+

Cuestiones relacionadas