2011-08-19 14 views
5

क्या वर्तमान ग्राहक किसी समूह का हिस्सा है या नहीं, इस पर आधारित मेरे Magento लेआउट में सशर्त रूप से एक ब्लॉक जोड़ने का कोई तरीका है?सशर्त रूप से Magento लेआउट में ब्लॉक जोड़ें

या यह कुछ बेहतर नियंत्रक में संभाला जाएगा?

उत्तर

16

customer_logged_in और customer_logged_out जैसे कुछ उपयोग करना अच्छा होगा लेकिन दुख की बात है कि यह अस्तित्व में नहीं है ... अभी तक।

चलिए एक ही तकनीक की प्रतिलिपि बनाते हैं। प्रारंभ करने के लिए आप के साथ config में इस के साथ एक मॉड्यूल बनाने की आवश्यकता होगी:

<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

क्या इन हैंडल का उपयोग किसी विशिष्ट पृष्ठ को लक्षित करते समय किया जा सकता है? बनाम प्रत्येक पृष्ठ के लिए उपयोग किया जाता है जब कोई ग्राहक किसी विशेष समूह का हिस्सा होता है? – veilig

+0

मुझे लगता है कि मुझे यह पता है कि यह कैसे करना है, कृपया अद्यतन उत्तर देखें। – clockworkgeek

0

निम्नलिखित पोस्ट विवरण कार्यक्षमता आपके आवश्यकता प्रदान करेगा: जोड़ने या तत्वों को दूर करने के अपने लेआउट फाइलों में http://www.magentocommerce.com/boards/viewthread/83244/#t219147

उपयोग customer_logged_in या ब्लॉक customer_logged_out, इन ब्लॉकों पिछले कहा जाता है।

अतिरिक्त एक्सटेंशन या कोड जोड़ने की आवश्यकता नहीं है, यह Magento में मानक के रूप में बनाया गया है।

उम्मीद है कि यह मदद करता है, मेरे लिए काम करता है। Magento संस्करण: 1.6+

संबंधित मुद्दे