TL; DR: existe uma maneira eu posso depurar o carregamento do layout? Como acredito que o layout de um módulo está em conflito com outro.
Relacionado a uma pergunta anterior que fiz: Como criar um layout de módulo para ser mostrado em todos os temas
Carreguei meu módulo com sucesso no meu ambiente de teste local (também conhecido como PC de desenvolvimento), testei a alternância entre três temas diferentes e está tudo bem. Atualizei o módulo no ambiente de teste ou "pré-produção" que possuímos, onde existem muitos módulos diferentes, alguns proprietários outros criados por nós. Nesse ambiente, o módulo não mostra o que é necessário na página inicial do produto. Após alguns testes, finalmente chego à conclusão de que o problema deve estar no processo de carregamento do layout.
Então, existe uma maneira de depurar o carregamento do layout, como diferentes módulos substituem ou adicionam seus próprios blocos? O que quero dizer é que acredito que há pelo menos um módulo que deveria estar em conflito com o meu. E como temos tantos módulos, estou procurando uma abordagem diferente para desativar os módulos um por um e ver qual é o problemático.
Meu arquivo 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>
Meu arquivo 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;
....
....
}
Este é o meu arquivo de 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>
Anteriormente tinha um pouco diferente, onde em vez de <default></default>
eu tinha <Product_Campaign_Banner></Product_Campaign_Banner>
. Também funcionou.
Meu arquivo product.phtml:
<div class="visual">
<?php echo $this->showCampaign(); ?>
</div>
O product.phtml
arquivo não é carregado e, portanto, o showCampaign
não é executado e é aí que todo o HTML necessário é criado.