TL; DR:有什么方法可以调试布局的加载?我相信一个模块的布局会与另一个模块冲突。
与我之前提出的问题有关:如何使模块布局显示在所有主题上
我已经成功地将模块加载到了本地测试环境(也就是我的开发PC)上,测试了在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>
。它也起作用。
我的product.phtml文件:
<div class="visual">
<?php echo $this->showCampaign(); ?>
</div>
该product.phtml
文件未加载,因此showCampaign
不会执行,并且在其中创建了所有需要的HTML。