C'è un modo per impostare tema diverso dipende dal gruppo di clienti?
Domanda
Voglio mostrare tema diverso dipende cliente group.Is C'è un modo per impostare tema diverso in modo dinamico?
Per esempio .: tema Un gruppo di clienti per il Generale e Tema B per il gruppo di clienti all'ingrosso.
Grazie in anticipo
Soluzione
Il modo più rapido e brutto è quello di controllare il gruppo del cliente corrente e quindi impostare il tema programmatico:
Mage::getDesign()->setArea('frontend')
->setPackageName('your_package')
->setTheme('your_theme');
Ma questa soluzione manca sicuramente una certa flessibilità.
Il modo più sofisticato potrebbe essere quella di creare un gruppo di clienti maniglie di layout e quindi impostare temi personalizzati lì. Questa soluzione si ispira questo articolo da Atwix.
Quindi, prima che devono essere rispettate evento controller_action_layout_load_before
:
<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>
Poi, nella tua classe osservatore implementare il metodo addCustomerGroupHandle
:
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_replace
qui non è infallibile quindi suggerisco la sua sostituzione con un'espressione regolare che andrà a sostituire tutti i caratteri non alfanumerici con sottolineature e poi ritagliare iniziali e finali di sottolineatura
Così ora è possibile 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>
Altri suggerimenti
Questo è più di un complemento alla risposta di Tim. È possibile creare sezioni di configurazione per ogni gruppo di clienti e impostare i valori per i temi in là. In questo modo non c'è bisogno di codificare i nomi dei gruppi di clienti e non è necessario modificare il codice ogni volta che si aggiunge un nuovo gruppo.
Ecco un esempio di come è possibile aggiungere config dinamica campi . Si tratta di creare 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.