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이 생성되는 경우가있다.