Apakah ada cara untuk mengatur tema yang berbeda tergantung pada kelompok pelanggan?

8

Saya ingin menunjukkan tema yang berbeda tergantung pada kelompok pelanggan. Apakah ada cara untuk mengatur tema yang berbeda secara dinamis?

Misalnya: Tema A untuk grup pelanggan umum dan Tema B untuk grup pelanggan grosir.

Terima kasih sebelumnya

Bijal Bhavsar
sumber

Jawaban:

17

Cara cepat dan jelek adalah memeriksa grup pelanggan saat ini dan kemudian mengatur tema secara program:

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

Tetapi solusi ini pasti kehilangan beberapa fleksibilitas.

Cara yang lebih canggih adalah dengan membuat handel tata letak kelompok pelanggan dan kemudian mengatur tema khusus di sana. Solusi ini terinspirasi oleh artikel ini oleh Atwix.

Jadi, pertama-tama Anda harus mengamati controller_action_layout_load_beforeacara:

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

Kemudian di kelas Anda menerapkan addCustomerGroupHandlemetode pengamat :

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

Catatan: Di str_replacesini bukan sangat mudah jadi saya sarankan menggantinya dengan ekspresi reguler yang akan mengganti semua karakter non-alfanumerik dengan garis bawah dan kemudian memotong garis depan dan akhiran garis bawah.

Jadi sekarang Anda dapat mengatur tema khusus untuk grup pelanggan apa pun melalui 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>
pengguna487772
sumber
4

Ini lebih merupakan tambahan untuk jawaban Tim. Anda dapat membuat bagian konfigurasi untuk setiap grup pelanggan dan mengatur nilai untuk tema di sana. Dengan cara ini Anda tidak perlu membuat kode nama-nama grup pelanggan dan Anda tidak perlu mengubah kode setiap kali Anda menambahkan grup baru.
Berikut adalah contoh bagaimana Anda dapat menambahkan bidang konfigurasi dinamis . Ini melibatkan pembuatan renderer baru untuk grup bagian konfigurasi.
Menggabungkan dalam pengamat ini dengan apa yang disarankan Tim:

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

harus mendapatkan hasil yang diinginkan.

Marius
sumber