एक वर्ग को कैसे फिर से लिखना है जो पहले से ही फिर से लिखा गया है?


15

अद्यतन: मैंने पाया कि जिस वर्ग को मुझे वास्तव में फिर से लिखने की आवश्यकता है वह SMDesign_SMDZoom_Block_Product_View_Mediaनहीं है और न ही SMDesign_ColorswatchProductView_Block_Product_View_Mediaजैसा कि मैंने मूल रूप से सोचा था। हालाँकि, ठीक यही मुद्दा अभी भी लागू होता है।

SMDesign SMDZoom एक्सटेंशन ब्लॉक वर्ग 'कैटलॉग / product_view_media' को फिर से लिखता है। इसके लिए xml इस तरह दिखता है:

       <global>
    ...         
       <blocks>
        <smdzoom>
            <class>SMDesign_SMDZoom_Block</class>
        </smdzoom>
    </blocks>
    <blocks>
        <catalog>
            <rewrite>
                <product_view_media>SMDesign_SMDZoom_Block_Product_View_Media</product_view_media>
            </rewrite>
        </catalog>
    </blocks>
           ....
       </global>

मैं इस वर्ग को फिर से लिखना चाहता हूं। मैं कैटलॉग / product_view_media वर्ग को फिर से लिखना चाहता हूं कि यह smdzoom मॉड्यूल पुनर्लेखन है। क्या यह किया जा सकता है? ऐसा करने के लिए मेरे मॉड्यूल में config xml कैसा दिखेगा?

वर्तमान में यह मेरा मॉड्यूल init xml फ़ाइल है:

<config>
    <modules>
        <Goorin_SMDZoom>
            <active>true</active>
            <codePool>local</codePool>
        </Goorin_SMDZoom>
        <depends>
            <Mage_Catalog />
            <SMDesign_SMDZoom />
        </depends>
    </modules>
</config>

और मॉड्यूल config.xml फ़ाइल:

<global>
        <blocks>
            <gbismdzoom>
                <class>Goorin_SMDZoom_Block</class>
            </gbismdzoom>
            <catalog>
                <rewrite>
                    <product_view_media>Goorin_SMDZoom_Block_Product_View_Media</product_view_media>
                </rewrite>
            </catalog>
        </blocks>
    </global>

मेरा नया वर्ग परीक्षण के लिए बस इस तरह दिखता है:

class Goorin_SMDZoom_Block_Product_View_Media extends SMDesign_SMDZoom_Block_Product_View_Media
{
    public function _construct() {
        parent::_construct();
    }
}

मैं टेम्पलेट पथ संकेत प्रदर्शित करके इसका परीक्षण कर रहा हूं, और मैं उत्पाद दृश्य पृष्ठ पर अभी भी SMDesign ब्लॉक का उपयोग कर रहा हूं। मैं क्या गलत कर रहा हूं?

जवाबों:


13

मैंने <depends>अपने मॉड्यूल के इनिट xml फ़ाइल में नोड को गलत स्थान पर रखा । इसे मॉड्यूल नाम के नोड के भीतर घोंसला बनाना चाहिए, जैसे:

<config>
    <modules>
        <Goorin_SMDZoom>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Catalog />
                <SMDesign_SMDZoom />
            </depends>
        </Goorin_SMDZoom>
    </modules>
</config>

10

यह हिस्सा यहां:

        <colorswatchproductview>
            <rewrite>
                <product_view_media>Goorin_ColorswatchProductView_Block_Product_View_Media</product_view_media>
            </rewrite>
        </colorswatchproductview>

केवल तभी मदद मिलेगी जब इसके माध्यम से मूल तात्कालिकता की createBlock('colorswatchproductview/product_view_media)
संभावना कम हो, क्योंकि पहला विस्तार फिर से लिखने का उपयोग कर रहा है, अर्थात वे जहां कहीं भी
createBlock('catalog/product_view_media')उपयोग किया जाना चाहते हैं

एक विकल्प एक ही ब्लॉक के लिए एक पुनर्लेखन का उपयोग करना होगा

  <catalog>
    <rewrite>
      <product_view_media>Goorin_ColorswatchProductView_Block_Product_View_Media</product_view_media>
    </rewrite>
  </catalog>

और फिर अपने ब्लॉक वर्ग में अन्य एक्सटेंशन ब्लॉक का विस्तार करें

class Goorin_ColorswatchProductView_Block_Product_View_Media extends SMDesign_ColorswatchProductView_Block_Product_View_Media

इसके लिए काम करने के लिए आपके एक्सटेंशन को पहले एक के बाद लोड करना होगा। मेरे परीक्षणों के दौरान यहां http://magebase.com/magento-tutorials/magento-extension-clashes-winners-and-loosers/ मैंने काम किया कि लोड ऑर्डर आपके ऐप / आदि / मॉड्यूल / xml फ़ाइलों के वर्णानुक्रम पर आधारित है। । वैकल्पिक रूप से यह आदेश एक डिपेंड्स नोड (SMDesign_ColorswatchProductView) का उपयोग करके प्रभावित किया जा सकता है।

आप त्रुटि संदेश देख रहे हैं क्योंकि आप अलगाव में ब्लॉक को प्रस्तुत करने की कोशिश कर रहे हैं, लेकिन इसे एक उत्पाद की आवश्यकता है, जिसे वह अपने मूल ब्लॉक से लोड करता है:

abstract class Mage_Catalog_Block_Product_View_Abstract extends Mage_Catalog_Block_Product_Abstract
{
    /**
     * Retrive product
     *
     * @return Mage_Catalog_Model_Product
     */
    public function getProduct()
    {
        $product = parent::getProduct();
        if (is_null($product->getTypeInstance(true)->getStoreFilter($product))) {
            $product->getTypeInstance(true)->setStoreFilter(Mage::app()->getStore(), $product);
        }

        return $product;
    }

मैं आपके निर्देशों को छोड़ देता हूं और श्रेणी को फिर से नहीं लिख सकता, यहां तक ​​कि निर्भर नोड के साथ भी।
निक रोलैंडो

अपने मॉड्यूल init xml फ़ाइल का नाम बदलकर z.xml करने का प्रयास करें और उसके बाद कैश रीफ़्रेश करें।
फोमन

क्षमा करें, मैं थोड़ी देर में इस पर वापस नहीं लौटा हूं। मैंने init xml फ़ाइल का नाम बदलकर zzz.xml रख दिया और फिर से काम किया! इसलिए मुझे लगता है कि मुझे यह पता लगाने की आवश्यकता है कि <depends>नोड क्यों काम नहीं कर रहा है ..
निक रोलैंडो

मैं मदद के लिए +1 धन्यवाद और मुझे जवाब देने के लिए अग्रणी :)
निक रोलैंडो

3

यही कारण है कि कोर कक्षाएं फिर से लिखना बेकार है।

वहाँ से कूल्हे की शूटिंग यहाँ लेकिन मुझे लगता है कि आपका सबसे अच्छा दांव रंग के कार्यान्वयन को लागू करना होगा Mage_Catalog_Blog_Product_View_Mediaऔर फिर अपने मॉड्यूल को रंग स्वैप मॉड्यूल पर निर्भर करना होगा।

एलन स्टॉर्म ने यहां एक ऐसे ही सवाल का जवाब दिया

इससे भी बेहतर होगा कि आप एक पर्यवेक्षक के माध्यम से जो कुछ भी करने की कोशिश कर रहे हैं उसे करने की कोशिश करें।

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