TL; DR: Gibt es eine Möglichkeit, das Laden des Layouts zu debuggen? Wie ich glaube, widerspricht das Layout eines Moduls dem eines anderen.
Im Zusammenhang mit einer früheren Frage stellte ich die Frage, wie ein Modullayout für alle Themen angezeigt werden kann
Ich habe mein Modul erfolgreich in meine lokale Testumgebung (auch bekannt als mein Entwicklungs-PC) geladen, das Umschalten zwischen 3 verschiedenen Themen getestet und es ist in Ordnung. Dann habe ich das Modul in der Test- oder "Pre-Production" -Umgebung aktualisiert, in der es viele verschiedene Module gibt, einige proprietäre andere von uns. In dieser Umgebung zeigt das Modul nicht an, was auf der Produktvorderseite benötigt wird. Nach einigen Tests bin ich zu dem Schluss gekommen, dass das Problem beim Laden des Layouts liegen sollte.
Gibt es eine Möglichkeit, das Laden des Layouts zu debuggen, wie verschiedene Module ihre eigenen Blöcke ersetzen oder hinzufügen? Mein Punkt ist, dass ich glaube, dass es mindestens ein Modul gibt, das mit meinem in Konflikt stehen sollte. Und da wir so viele Module haben, suche ich nach einem anderen Ansatz, um die Module einzeln zu deaktivieren, und finde heraus, welches das Problem ist.
Meine config.xml-Datei ist:
<?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>
Meine Observer-Datei:
<?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;
....
....
}
Dies ist meine Layoutdatei:
<?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>
Hatte vorher eine etwas andere wo <default></default>
ich statt hatte <Product_Campaign_Banner></Product_Campaign_Banner>
. Es hat auch funktioniert.
Meine product.phtml Datei:
<div class="visual">
<?php echo $this->showCampaign(); ?>
</div>
Die product.phtml
Datei wird nicht geladen und daher showCampaign
nicht ausgeführt. Dort wird der gesamte erforderliche HTML-Code erstellt.