2012-03-03 8 views
8

में Magento ब्लॉक टेम्पलेट सेट करें Magento के लेआउट xml में ब्लॉक टेम्पलेट सेट करने में समस्या आ रही है। मैं एक बच्चे ब्लॉक के टेम्पलेट को सेट करने का प्रयास कर रहा हूं, न कि संपूर्ण पृष्ठ लेआउट (लगभग सभी दस्तावेज बताते हैं कि लेआउट के टेम्पलेट को कैसे सेट करें)।लेआउट xml

पृष्ठभूमि: मैं को अपने मॉड्यूल के लेआउट xml में <update /> टैग का उपयोग करके, मेरी कस्टम कार्रवाई में एक लेआउट हैंडल अपडेट कर रहा हूं।

अनिवार्य रूप से, मैं निर्मित उत्पाद दृश्य कार्रवाई के लेआउट और ब्लॉक का पुन: उपयोग करना चाहता हूं, लेकिन कुछ ब्लॉक के लिए कस्टम टेम्पलेट प्रदान करना चाहता हूं। (केवल ओवरराइड नहीं, इन्हें ब्रांड नए टेम्पलेट्स होने की आवश्यकता है जो केवल मेरी कस्टम कार्रवाई पर ट्रिगर हो जाते हैं और स्वयं ओवरराइड करने योग्य होते हैं)।

मेरे लेआउट एचटीएमएल:

<?xml version="1.0"?> 
<layout version="0.1.0"> 
<mymodule_product_index> 
    <update handle="catalog_product_view" /> 
    <reference name="content"> 
     <block type="catalog/product_view" 
     name="product.info" output="toHtml" template="mymodule/product.phtml" /> 
     </reference> 

    <reference name="product.info.bundle"> 
     <action method="setTemplate"><template>mymodule/customtemplate.phtml</template></action> 
    </reference> 
</mymodule_product_index> 
</layout> 

setTemplate पर product.info.bundle कभी नहीं काम करता है; यह बिल्कुल लेआउट को प्रभावित नहीं करता है। मैंने <reference> को अन्य <reference> नोड्स को बिना किसी प्रभाव के पैरेंट ब्लॉक से लपेटने का प्रयास किया है। क्या ब्लॉक टेम्पलेट्स को इस तरह से बदलना संभव है? मुझे लगता है कि मेरी समस्या इस तथ्य से उत्पन्न होती है कि मैं <update /> का उपयोग कर रहा हूं।

वैसे, मैं जानता हूँ कि मेरी लेआउट एक्सएमएल लोड किया जा रहा है और कोई त्रुटि, फ़ाइल के बाकी ठीक काम कर रहा है, कैशिंग है विकलांग, कैश साफ कर दिया आदि वैसे भी देखते हैं,

+1

क्या आपको पता है कि टैग का मतलब क्या है/कर रहा है? अद्यतन टैग, अद्यतन हैंडल ले रहा है जो है और इसे वर्तमान लेआउट.एक्सएमएल –

+0

के साथ विलय कर रहा है इस लिंक को जांचें [Magento लेआउट एक्सएमएल] (http://magebase.com/magento-tutorials/demystifying-magentos-layout- xml-part-1 /) –

+0

@ OğuzÇelikdemir हां यही कारण है कि मैं ' 'टैग का उपयोग कर रहा हूं; मैं एक मौजूदा लेआउट लेना चाहता हूं और इसका पुन: उपयोग करना चाहता हूं। मैंने उस पृष्ठ का उपयोग किया है जिसका आपने काफी संदर्भ दिया है; यह एक महान संसाधन है ... हालांकि केवल 'सेट टेम्पलेट' उदाहरण लेआउट को बदलते हैं, न कि ब्लॉक टेम्पलेट। –

उत्तर

18

आपका दृष्टिकोण लगभग है सही बात।
दो बातें:
1. सेट एक नया टेम्पलेट के बजाय एक नए ब्लॉक सिर्फ product.info ब्लॉक करने के लिए एक अलग टेम्पलेट बताए, आप एक ही नाम के साथ एक नया उदाहरण बना रहे हैं की
इसके बजाय instantiating, मूल उदाहरण की जगह , और उसके बाद नया टेम्पलेट उस पर सेट है। इसके बजाय इस का उपयोग करें:

<mymodule_product_index> 
    <update handle="catalog_product_view" /> 
    <reference name="product.info"> 
     <action method="setTemplate"> 
      <template>mymodule/product.phtml</template> 
     </action> 
    </reference> 
</mymodule_product_index> 

कि एक साफ तरह से उत्पाद को देखने टेम्पलेट का ध्यान रखना चाहिए।

2. हैंडल प्रसंस्करण आदेश
तुम कहाँ बंडल किए गए उत्पादों के लिए दृश्य ब्लॉक product.info.bundle घोषित किया जाता है को देखें, तो आप इसे bundle.xml फ़ाइल में होता है, एक लेआउट अद्यतन संभाल <PRODUCT_TYPE_bundle> बुलाया में देखेंगे।

आपका कोड <[route]_[controller]_[action]> लेआउट हैंडल से ब्लॉक को संदर्भित कर रहा है, यानी <mymodule_product_index>

बात यहाँ के बारे में पता होना करने के लिए लेआउट हैंडल प्रसंस्करण आदेश है। मोटे तौर पर यह है:

  1. <default>
  2. <[route]_[controller]_[action]>
  3. <custom_handles>

<PRODUCT_TYPE_bundle> संभाल लेआउट हैंडल के तीसरे प्रकार है, जो यह <mymodule_product_index> संभाल के बाद संसाधित किया जाता है इसका मतलब है के अंतर्गत आता है।
संक्षेप में, आप घोषित किए जाने से पहले ब्लॉक product.info.bundle को संदर्भित कर रहे हैं।

इसे ठीक करने के लिए आपको <PRODUCT_TYPE_bundle> हैंडल का भी उपयोग करने की आवश्यकता होगी। बेशक यह हर बंडल उत्पाद प्रदर्शन को प्रभावित करेगा। लेआउट एक्सएमएल का उपयोग केवल उस के आसपास कोई साफ रास्ता नहीं है।

यहां कुछ समस्याएं हैं जो उस समस्या को हल करने के लिए हैं।

आप अपने मॉड्यूल में बंडल उत्पादों को दिखाने के लिए एक अलग मार्ग बना सकते हैं, और उसके बाद <PRODUCT_TYPE_bundle> उस पृष्ठ के लिए update निर्देश का उपयोग करके हैंडल भी शामिल कर सकते हैं।

अपने कस्टम एक्शन कंट्रोलर में, आप <PRODUCT_TYPE_bundle> के बाद संसाधित किए गए एक और लेआउट अपडेट हैंडल को जोड़ सकते हैं।

यदि आप तत्काल हैं तो product.info.bundle ब्लॉक पर टेम्पलेट सेट करने के लिए आप किसी ईवेंट पर्यवेक्षक का उपयोग कर सकते हैं। एक संभावना घटना controller_action_layout_generate_blocks_after होगी।

आपको यह विचार मिलता है, इसके आसपास काम करने के कई तरीके हैं, लेकिन उन्हें PHP की आवश्यकता है।

+0

आपकी अंतर्दृष्टि के लिए धन्यवाद, यह बहुत उपयोगी था। मैंने इसे आपके ईवेंट पर्यवेक्षक दृष्टिकोण का उपयोग करके काम किया है। –

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