TL; DR: ¿hay alguna forma de depurar la carga del diseño? Como creo, el diseño de un módulo está en conflicto con otro.
Relacionado con una pregunta anterior que hice: Cómo hacer que un diseño de módulo se muestre en todos los temas
Cargué con éxito mi módulo en mi entorno de prueba local (también conocido como mi PC de desarrollo), probé el cambio entre 3 temas diferentes y está bien. Luego actualicé el módulo en el entorno de prueba o "preproducción" que tenemos, donde hay muchos módulos diferentes, algunos patentados y otros creados por nosotros. En este entorno, el módulo no muestra lo que se necesita en la página principal del producto. Después de algunas pruebas, finalmente llegué a la conclusión de que el problema debería estar en el proceso de carga de diseño.
Entonces, ¿hay alguna manera de depurar la carga del diseño, cómo los diferentes módulos reemplazan o agregan sus propios bloques? Mi punto es que creo que hay al menos un módulo que debería estar en conflicto con el mío. Y como tenemos tantos módulos, estoy buscando un enfoque diferente a deshabilitar los módulos uno por uno y ver cuál es el problemático.
Mi archivo config.xml es:
<?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>
Mi archivo de observador:
<?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;
....
....
}
Este es mi archivo de diseño:
<?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>
Anteriormente tenía uno ligeramente diferente en lugar de que <default></default>
yo tenía <Product_Campaign_Banner></Product_Campaign_Banner>
. También funcionó.
Mi archivo product.phtml:
<div class="visual">
<?php echo $this->showCampaign(); ?>
</div>
El product.phtml
archivo no se carga y, por lo tanto, showCampaign
no se ejecuta y allí es donde se crea todo el HTML necesario.