TL; DR: esiste un modo per eseguire il debug del caricamento del layout? Poiché credo che il layout di un modulo sia in conflitto con un altro.
Relativo a una domanda precedente che ho fatto: Come creare un layout del modulo da mostrare su tutti i temi
Ho caricato con successo il mio modulo sul mio ambiente di test locale (ovvero il mio PC di sviluppo), ho testato il passaggio tra 3 temi diversi ed è ok. Quindi ho aggiornato il modulo sull'ambiente di test o "pre-produzione" che abbiamo, dove ci sono molti moduli diversi, alcuni proprietari altri realizzati da noi. In questo ambiente, il modulo non mostra ciò che è necessario sulla prima pagina del prodotto. Dopo alcuni test, sono finalmente giunto alla conclusione che il problema dovrebbe riguardare il processo di caricamento del layout.
Quindi, c'è un modo in cui posso eseguire il debug del caricamento del layout, in che modo i diversi moduli sostituiscono o aggiungono i propri blocchi? Il mio punto è che credo che ci sia almeno un modulo che dovrebbe essere in conflitto con il mio. E dato che abbiamo così tanti moduli, sto cercando un approccio diverso dalla disabilitazione dei moduli uno per uno e vedo qual è quello problematico.
Il mio file 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>
Il mio file Observer:
<?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;
....
....
}
Questo è il mio file di layout:
<?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>
Precedentemente ne avevo una leggermente diversa, invece di <default></default>
me <Product_Campaign_Banner></Product_Campaign_Banner>
. Funzionava anche.
Il mio file product.phtml:
<div class="visual">
<?php echo $this->showCampaign(); ?>
</div>
Il product.phtml
file non viene caricato e quindi showCampaign
non viene eseguito ed è lì che viene creato tutto l'HTML necessario.