Có cách nào để thiết lập chủ đề khác nhau tùy thuộc vào nhóm khách hàng?


8

Tôi muốn hiển thị chủ đề khác nhau tùy thuộc vào nhóm khách hàng. Có cách nào để thiết lập chủ đề khác nhau một cách linh hoạt không?

Ví dụ: Chủ đề A cho nhóm khách hàng chung và Chủ đề B cho nhóm khách hàng Bán buôn.

Cảm ơn trước

Câu trả lời:


17

Cách nhanh chóng và xấu xí là kiểm tra nhóm khách hàng hiện tại và sau đó thiết lập chủ đề theo chương trình:

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

Nhưng giải pháp này chắc chắn bỏ lỡ một số linh hoạt.

Cách tinh vi hơn sẽ là tạo một tay cầm bố cục nhóm khách hàng và sau đó đặt chủ đề tùy chỉnh ở đó. Giải pháp này được lấy cảm hứng từ bài viết này của Atwix.

Vì vậy, trước tiên bạn phải quan sát controller_action_layout_load_beforesự kiện:

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

Sau đó, trong lớp người quan sát của bạn thực hiện addCustomerGroupHandlephương thức:

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

Lưu ý: Ở str_replaceđây không thể đánh lừa được, vì vậy tôi khuyên bạn nên thay thế nó bằng một biểu thức thông thường sẽ thay thế tất cả các ký tự không phải là chữ và số bằng dấu gạch dưới và sau đó cắt bớt dấu gạch đầu dòng và dấu gạch dưới.

Vì vậy, bây giờ bạn có thể đặt chủ đề tùy chỉnh cho bất kỳ nhóm khách hàng nào thông qua 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>

4

Đây là một bổ sung cho câu trả lời của Tim. Bạn có thể tạo các phần cấu hình cho từng nhóm khách hàng và đặt các giá trị cho các chủ đề trong đó. Bằng cách này, bạn không phải mã cứng tên nhóm khách hàng và bạn không phải thay đổi mã mỗi khi bạn thêm một nhóm mới.
Dưới đây là một ví dụ về cách bạn có thể thêm các trường cấu hình động . Nó liên quan đến việc tạo một trình kết xuất mới cho một nhóm phần cấu hình.
Kết hợp trong một người quan sát điều này với những gì Tim gợi ý:

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

sẽ nhận được kết quả mong muốn của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.