【发布时间】:2011-10-30 17:02:51
【问题描述】:
有没有办法根据当前客户是否属于某个组,有条件地在我的 magento 布局中添加一个块?
或者这会在控制器中更好地处理吗?
【问题讨论】:
标签: php xml templates layout magento
有没有办法根据当前客户是否属于某个组,有条件地在我的 magento 布局中添加一个块?
或者这会在控制器中更好地处理吗?
【问题讨论】:
标签: php xml templates layout magento
以下帖子将详细介绍您需要的功能:http://www.magentocommerce.com/boards/viewthread/83244/#t219147
在布局文件中使用 customer_logged_in 或 customer_logged_out 块来添加或删除元素,这些块被最后调用。
无需添加额外的扩展或代码,这是 Magento 标准内置的。
希望这对我有用。 Magento 版本:1.6+
【讨论】:
使用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>
【讨论】: