Gibt es eine Möglichkeit, je nach Kundengruppe unterschiedliche Themen festzulegen?

8

Ich möchte je nach Kundengruppe unterschiedliche Themen anzeigen. Gibt es eine Möglichkeit, unterschiedliche Themen dynamisch festzulegen?

Zum Beispiel: Thema A für die allgemeine Kundengruppe und Thema B für die Großhandelskundengruppe.

Danke im Voraus

Bijal Bhavsar
quelle

Antworten:

17

Der schnelle und hässliche Weg besteht darin, die aktuelle Kundengruppe zu überprüfen und das Thema dann programmgesteuert festzulegen:

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

Bei dieser Lösung fehlt jedoch definitiv eine gewisse Flexibilität.

Der komplexere Weg wäre, ein Kundengruppen-Layout zu erstellen und dort benutzerdefinierte Themen festzulegen. Diese Lösung ist von diesem Artikel von Atwix inspiriert .

Also muss man zuerst das controller_action_layout_load_beforeEreignis beobachten :

<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>

Dann implementieren Sie in Ihrer Beobachterklasse die addCustomerGroupHandleMethode:

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;
}

Hinweis: Das str_replacehier ist nicht narrensicher, daher empfehle ich, es durch einen regulären Ausdruck zu ersetzen, der alle nicht alphanumerischen Zeichen durch Unterstriche ersetzt und dann führende und nachfolgende Unterstriche abschneidet.

Jetzt können Sie über XML ein benutzerdefiniertes Thema für jede Kundengruppe festlegen:

<?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
quelle
4

Dies ist eher eine Ergänzung zu Tims Antwort. Sie können Konfigurationsabschnitte für jede Kundengruppe erstellen und dort die Werte für die Themen festlegen. Auf diese Weise müssen Sie die Kundengruppennamen nicht fest codieren und den Code nicht jedes Mal ändern, wenn Sie eine neue Gruppe hinzufügen.
Hier ist ein Beispiel, wie Sie dynamische Konfigurationsfelder hinzufügen können . Dabei wird ein neuer Renderer für eine Konfigurationsabschnittsgruppe erstellt.
Kombinieren Sie dies in einem Beobachter mit dem, was Tim vorgeschlagen hat:

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

sollte Ihr gewünschtes Ergebnis erhalten.

Marius
quelle