Frage

Ich möchte zeigen, dass ein anderes Thema von der Kundengruppe abhängt. Gibt es eine Möglichkeit, ein anderes Thema dynamisch festzulegen?

Für z. B.: Thema A für die allgemeine Kundengruppe und das Thema B für die Großhandelskundengruppe.

Danke im Voraus

War es hilfreich?

Lösung

Der schnelle und hässliche Weg besteht darin, die Gruppe des aktuellen Kunden zu überprüfen und dann das Themenprogramme zu setzen:

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

Aber diese Lösung verpasst definitiv etwas Flexibilität.

Der ausgefeiltere Weg wäre, ein Kundengruppenlayout -Handels zu erstellen und dort benutzerdefinierte Themen festzulegen. Diese Lösung ist inspiriert von Dieser Artikel von Atwix.

Also muss man zuerst beobachten controller_action_layout_load_before Veranstaltung:

<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 in Ihrer Beobachterklasse implementiert addCustomerGroupHandle Methode:

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

Beachten Sie das str_replace Hier ist nicht narrensicher, daher schlage ich vor, es durch einen regelmäßigen Ausdruck zu ersetzen, der alle nicht alphanumerischen Zeichen durch Unterstriche ersetzt und dann führende und nachverfolgende Unterstriche trimm.

Jetzt können Sie also ein benutzerdefiniertes Thema für jede Kundengruppe über XML 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>

Andere Tipps

Dies ist eher eine Ergänzung zu Tims Antwort. Sie können Konfigurationsabschnitte für jede Kundengruppe erstellen und die Werte für die Themen dort festlegen. Auf diese Weise müssen Sie die Kundengruppennamen nicht harten Code und nicht jedes Mal ändern, wenn Sie eine neue Gruppe hinzufügen.
Hier ist ein Beispiel dafür, wie Sie dynamische Konfigurationsfelder hinzufügen können. Dazu gehört es, einen neuen Renderer für eine Konfigurationsabschnittgruppe zu erstellen.
Kombination in einem Beobachter dies mit dem, was Tim vorschlug:

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

Sollte Ihr gewünschtes Ergebnis erzielen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top