2011-06-15 9 views
20

और unsetChild लेआउट में विधियों को हटाने के बीच क्या अंतर है?लेआउट में हटाने और unsetChild विधियों के बीच क्या अंतर है?

उदाहरण के लिए (poll.xml में लेआउट फ़ाइल):

<customer_account_index> 
    <reference name="right"> 
     <action method="unsetChild"><name>catalog_compare_sidebar</name></action> 
    </reference> 
</customer_account_index> 

क्यों unsetChild और न सिर्फ हटाने?

उत्तर

37

हटाएं सभी लेआउट हैंडल विलय किए जाने के बाद नोड्स को संसाधित किया जाएगा, और ब्लॉक को हटाने के लिए एक अच्छा तरीका है, भले ही कौन से लेआउट हैंडल ब्लॉक को लोड करते हैं; आप बस इसे कुछ हैंडल के लिए पूरी तरह से छुटकारा पाना चाहते हैं! यह पुनरावर्ती भी हटा देता है, इसलिए आपको निर्दिष्ट करने की आवश्यकता है लेआउट हैंडल है।

दूसरी ओर, आप केवल एक विशिष्ट लेआउट हैंडल में संदर्भ से ब्लॉक को हटाना चाहते हैं, इस मामले में आपको unsetChild का उपयोग करना चाहिए। इसे अक्सर किसी संदर्भ से ब्लॉक को निकालने के लिए उपयोग किया जाता है, लेकिन फिर उसी ब्लॉक को एक अलग स्थिति के साथ दोबारा डालें। यह हटाने के साथ संभव नहीं होता।

आपके बहुत विशिष्ट उदाहरण में, Magento डेवलपर्स ने इसे कुछ लचीलापन देने के लिए इस्तेमाल किया। मान लीजिए कि मैं खाते सूचकांक पृष्ठ के लिए एक उप-पृष्ठ जोड़ा, और निम्नलिखित लेआउट हैंडल लाद दिए गए हैं:

  • डिफ़ॉल्ट
  • ...
  • customer_account_index
  • customer_account_index_subpage

और अब मान इस उपपृष्ठ पर मैं वास्तव में 'catalog_compare_sidebar' ब्लॉक चाहता हूं। अगर उन्होंने 'हटाएं' इस्तेमाल किया था, तो मैं इस ब्लॉक को (इस विशिष्ट नाम के साथ) जोड़ने में सक्षम नहीं होगा क्योंकि 'हटाएं' संसाधित किया जाएगा - इसके बाद- मैंने स्वयं ब्लॉक को जोड़ा था।

यह आपको आसानी से एक फ़ाइल से परिवर्तन करने की अनुमति देता है; local.xml।

+3

इस तरह के एक अच्छे उत्तर के लिए धन्यवाद। –

+1

ग्रेट स्पष्टीकरण, धन्यवाद! – Snowcore

+1

मुझे कोई समस्या है जब मुझे प्यार है और Google मुझे इस तरह की एक महान पोस्ट के साथ जोड़ता है! डैनियल बहुत बहुत धन्यवाद। इससे मुझे मेरी समस्या का एहसास हुआ। –

1

टेम्पलेट से पूरी तरह से एक उदाहरण के रूप में अपने कोड ले रहा है, यदि आप unsetchild उपयोग करते हैं, साइडबार ब्लॉक अधिकार स्तम्भ से हटा तुलना, लेकिन आप इसे कहीं भी बाएँ स्तंभ, पाद लेख आदि की तरह उपयोग कर सकते हैं .., remove हटाता है, और उपयोग नहीं किया जा सकता है कहीं भी।

remove का उपयोग करके साइडबार की तुलना करें और यदि आप इसे कहीं और कहते हैं, तो त्रुटि फेंक दी जाएगी।

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