условно добавить блоки в макет magento - PullRequest
6 голосов
/ 19 августа 2011

Есть ли способ условно добавить блок в моем макете magento на основе того, является ли текущий клиент частью группы или нет?

или это будет лучше обрабатываться в контроллере?

Ответы [ 2 ]

16 голосов
/ 19 августа 2011

Было бы неплохо использовать что-то вроде customer_logged_in и customer_logged_out, но, к сожалению, этого не существует ... пока.

Давайте скопируем ту же технику.Для начала вам нужно сделать модуль с этим в конфигурации:

<frontend>
    <events>
        <controller_action_layout_load_before>
            <observers>
                <customer_group_observer>
                    <class>CUSTOM_MODULE/observer</class>
                    <method>beforeLoadLayout</method>
                </customer_group_observer>
            </observers>
        </controller_action_layout_load_before>
    </events>
</frontend>

В классе CUSTOM_MODULE_Model_Observer добавьте этот метод:

public function beforeLoadLayout($observer)
{
    $groupId = Mage::getSingleton('customer/session')->getCustomerGroupId();
    $group = Mage::getModel('customer/group')->load($groupId);

    $observer->getEvent()->getLayout()->getUpdate()
       ->addHandle('customer_group_'.$group->getCode());
}

Теперь в файлах макета выможно использовать группы клиентов.

<layout>
    <customer_group_General>
        <reference name="content">
            <!-- Add some blocks -->
        </reference>
    </customer_group_General>
</layout>

Кроме того, этот метод не позволяет вам напрямую указывать блоки на странице, но вы можете обойти это.Вот пример, который создает новое местоположение только для страниц продукта, на всех других страницах обновление не должно иметь никакого эффекта и завершаться неудачно.

<layout>
    <catalog_product_view>
        <reference name="content">
            <block type="core/text_list" name="group_container" />
        </reference>
    </catalog_product_view>

    <customer_group_General>
        <reference name="group_container">
            <!-- Add some blocks -->
        </reference>
    </customer_group_General>
</layout>
0 голосов
/ 10 марта 2014

В следующем посте будут подробно описаны необходимые вам функции: http://www.magentocommerce.com/boards/viewthread/83244/#t219147

Используйте блоки customer_logged_in или customer_logged_out в файлах макета для добавления или удаления элементов, эти блоки называются последними.Не нужно добавлять дополнительные расширения или код, это стандартно встроено в Magento.

Надеюсь, это поможет, сработало для меня.Версия Magento: 1.6 +

...