TL; DR: एक ऐसा तरीका है जिससे मैं लेआउट के लोडिंग को डीबग कर सकता हूं? जैसा कि मेरा मानना है कि एक मॉड्यूल का लेआउट दूसरे के साथ विरोध कर रहा है।
मेरे द्वारा किए गए एक पिछले प्रश्न से संबंधित: सभी विषयों पर दिखाए जाने वाले मॉड्यूल लेआउट कैसे बनाएं
मैंने अपने मॉड्यूल को अपने स्थानीय परीक्षण वातावरण (उर्फ मेरा विकास पीसी) पर सफलतापूर्वक लोड किया है, 3 अलग-अलग विषयों के बीच स्विचिंग का परीक्षण किया है और यह ठीक है। तब हमने परीक्षण या "पूर्व-उत्पादन" वातावरण पर मॉड्यूल को अपडेट किया, जहां हमारे पास बहुत सारे अलग-अलग मॉड्यूल हैं, कुछ मालिकाना अन्य जो हमारे द्वारा बनाए गए हैं। इस माहौल पर, मॉड्यूल यह नहीं दिखाता है कि उत्पाद के फ्रंटपेज पर क्या आवश्यक है। कुछ परीक्षणों के बाद, मैं अंत में इस निष्कर्ष पर पहुंचा हूं कि समस्या लेआउट लोड प्रक्रिया पर होनी चाहिए।
तो, क्या कोई ऐसा तरीका है जिससे मैं लेआउट के लोडिंग को डिबग कर सकता हूं, कैसे विभिन्न मॉड्यूल अपने स्वयं के ब्लॉक को बदलते हैं या जोड़ते हैं? मेरा कहना यह है कि मेरा मानना है कि कम से कम एक मॉड्यूल है जो मेरे साथ परस्पर विरोधी होना चाहिए। और जैसा कि हमारे पास बहुत सारे मॉड्यूल हैं, मैं एक-एक करके मॉड्यूल को अक्षम करने के लिए एक दृष्टिकोण की तलाश कर रहा हूं और देखें कि समस्याग्रस्त कौन है।
मेरी config.xml फ़ाइल है:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Dts_Banners>
<version>0.1.0</version>
</Dts_Banners>
</modules>
<global>
<blocks>
<banners>
<class>Dts_Banners_Block</class>
</banners>
</blocks>
....
<events>
<controller_action_layout_load_before>
<observers>
<attributesethandle>
<class>Dts_Banners_Model_Observer</class>
<method>addAttributeSetHandle</method>
</attributesethandle>
</observers>
</controller_action_layout_load_before>
</events>
</global>
....
</config>
मेरी ऑब्जर्वर फ़ाइल:
<?php
class Dts_Banners_Model_Observer
{
/**
* Checks if the search text on the list of active campaigns (dts_banners_admin table) has some of the comma separated text on the product name
* If text found, add a layout handle PRODUCT_CAMPAIGN_BANNER after PRODUCT_TYPE_<product_type_id> handle
* This handle is handled on the banners.xml layout file that triggers the use of the Front.php frontend block
*
* Event: controller_action_layout_load_before
*
* @param Varien_Event_Observer $observer
*/
public function addAttributeSetHandle(Varien_Event_Observer $observer) {
$product = Mage::registry('current_product');
if (!($product instanceof Mage_Catalog_Model_Product)) return;
....
....
}
यह मेरी लेआउट फ़ाइल है:
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">
<default>
<reference name="content">
<block type="banners/front" name="banners.front" as="banners_front" template="banners/product.phtml" before="-"/>
</reference>
</default>
</layout>
पहले थोड़ा अलग था, जहां <default></default>
मेरे बजाय था <Product_Campaign_Banner></Product_Campaign_Banner>
। यह भी काम किया।
मेरा उत्पाद। Phtml फ़ाइल:
<div class="visual">
<?php echo $this->showCampaign(); ?>
</div>
product.phtml
फ़ाइल लोड किया जाता है नहीं है और इसलिए showCampaign
मार डाला नहीं है और वहाँ है, जहां सभी आवश्यक HTML बनाई गई है।