2011-08-19 25 views

回答

16

這將是很好的使用類似customer_logged_incustomer_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

很好的答案!感謝所有的幫助! – veilig

+0

定位特定頁面時可以使用這些句柄嗎? vs當客戶是特定組的一部分時用於每個頁面? – veilig

+0

我想我有一個想法如何做到這一點,請看到更新的答案。 – clockworkgeek

0

以下職位將提供詳細信息您需要的功能:在你的佈局文件添加或移除元素http://www.magentocommerce.com/boards/viewthread/83244/#t219147

使用customer_logged_in或customer_logged_out塊,這些塊被稱爲最後。

無需添加額外的擴展或代碼,這是作爲標準內置到Magento中。

希望這會有所幫助,爲我工作。 Magento版本:1.6+