ब्लॉक प्रकार को लेआउट XML में बदलना संभव है?


13

क्या लेआउट XML में ब्लॉक प्रकार बदलना संभव है?

मुझे पता है कि setTemplateविधि का उपयोग करके टेम्पलेट को कैसे बदलना है , लेकिन मैं एक ब्लॉक के प्रकार को बदलने की कोशिश कर रहा हूं। क्या यह संभव है?


कृपया विवरण में बताएं कि आपको क्या बदलना है
कीयुल शाह

जवाबों:


7

ब्लॉक प्रकार बदलने का अर्थ है ब्लॉक क्लास को बदलना, इसलिए नहीं, लेकिन ...

... आप ब्लॉक को अधिलेखित कर सकते हैं:

  1. एक लेआउट हैंडल ढूंढें जो बाद में आह्वान किया गया हो या सुनिश्चित हो, कि आपके layout.xmlद्वारा ब्लॉक बनाए जाने के बाद संसाधित किया गया है, जैसे कि <depends>अंदरCompany_Module.xml
  2. बस उसी नाम के साथ अन्य प्रकार का एक नया ब्लॉक बनाएं

समस्या यह है, कि यह ब्लॉक को ओवरराइट कर देता है और प्रकार नहीं बदलता है। इसका मतलब यह है कि सृष्टि के बीच इस ब्लॉक पर जो कुछ भी किया जाता है और आपका परिवर्तन खो जाता है।

उदाहरण के लिए catalog.navigation:

<layout version="0.1.0">
    <catalog_category_default translate="label">
        <reference name="left">
            <block type="myModule/navigation" name="catalog.leftnav" after="currency" template="myModule/catalog/navigation/left.phtml"/>
        </reference>
    </catalog_category_default>
</layout>

1
आप एक नया ब्लॉक क्लास भी बना सकते हैं, जिसे आप जिस ब्लॉक क्लास को बदलना चाहते हैं उसे "इनहेरिट करता है"। ब्लॉक क्लास को अपने साथ स्वैप करने के लिए आपको अपने कस्टम एक्सटेंशन के config.xml में एक प्रविष्टि जोड़ने की आवश्यकता होगी। यदि आप ब्लॉक की कार्यक्षमता को बढ़ाने या संशोधित करने की योजना बनाते हैं तो यह समझ में आएगा।
बियाजियो अरोबा

3

आप इसे लेआउट-फाइलों में बदल नहीं सकते हैं। हालाँकि, आप अपनी कॉन्फिग-फाइल्स में इन्हें बढ़ा सकते हैं और ओवरराइड कर सकते हैं।

उदाहरण:

<config>
    <global>
        <blocks>
            <catalog>
                <rewrite><product_view>My_Custom_Block_Product_View</product_view></rewrite>
            </catalog>
        </blocks>
    </global>
</config>

मूल ब्लॉक का विस्तार करना याद रखें।


1

मैं इसी तरह के मुद्दे का सामना कर रहा था कि मुझे एक विशिष्ट लेआउट के लिए एक विशिष्ट ब्लॉक को अपडेट करने की आवश्यकता है।

मैं क्या कर रहा हूँ और ऐसा लगता है कि काम करना है (लेआउट फ़ाइल में)

<controller_x_y>
    <reference name="block_name_reference">
        <block type="mymodule/customblock" name="block_name_reference" />
    </reference>
</controller_x_y>

उम्मीद है की यह मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.