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.
Antworten:
Sie können die kompilierten Layout-XML-Anweisungen protokollieren, die zum Generieren von Blöcken verwendet werden. Erstellen Sie einen Beobachter
controller_action_layout_generate_blocks_before
, und protokollieren Sie in der Beobachtermethode die Aktualisierungs-XML des transportierten Layoutobjekts:Die Ausgabe wird ähnlich sein wie:
quelle
controller_action_layout_generate_blocks_before
" - Dies ist eine M1-Frage.Auf diese Weise können Sie alle Layout-Handles in Ihrem Controller abrufen:
Oder irgendwo (solange das Layout initialisiert wurde) mit diesem Befehl:
Vielleicht hilft Ihnen das beim Debuggen.
BEARBEITEN
Haben Sie Ihre config.xml so eingestellt, dass sie die Blockklasse angibt?
quelle
core/template
? Dies dient nur zur Beseitigung von Fehlern in Ihren Moduleinstellungen.Ich benutze PhpStorm mit Magicento und dachte, ich würde @benmarks großartige Antwort auf meine Verwendung anpassen.
Öffnen Sie in PhpStorm
app/code/core/Mage/Core/Controller/Varien/Action.php
und fügen Sie einen Haltepunkt in die Methode eingenerateLayoutBlocks()
. Ich denke, es geht darum, es irgendwo vorher einzufügen$this->getLayout()->generateBlocks();
. Ich habe es in die vorige Zeile gestellt.Nachdem Sie den Haltepunkt eingefügt haben, der durch den roten Punkt links neben der Zeilennummer gekennzeichnet ist, können Sie mit der rechten Maustaste darauf klicken, um das Verhalten anzupassen. Klicken Sie unten auf "Mehr", um alle Optionen zu öffnen.
Sobald Sie dies geöffnet haben, aktivieren Sie das Kontrollkästchen für "Nachricht an Konsole protokollieren" (optional) und "Auswertungsausdruck protokollieren" (wo die Magie passiert). Kopieren Sie dann diese Anpassung von Benmarks Code in das Textfeld. Das einzige, was ich geändert habe, ist, die
$request
Variable wieMage::app()->getRequest()
jedes Mal zu buchstabieren und$o
in$this
(b / c, wir sind hier nicht im Beobachterkontext) zu ändern .So sieht es jetzt aus:
Nachdem Sie das Programm ausgeführt haben (mit xdebug oder zend debugger), halten Sie am Haltepunkt an und sehen dies im Protokoll:
Es scheint eine Größenbeschränkung für die Protokolleinträge zu sein , die durch die bestimmt werden könnten
idea.cycle.buffer.size
Eigenschaft in deridea.properties
Datei für PhpStorm, nach diesem . Sie können dies ändern oder einfach mit der rechten Maustaste auf das Codefenster klicken und "Ausdruck auswerten" aus dem Dropdown-Menü auswählen und den auszuführenden Code kopieren und einfügen, um die vollständige Ausgabe zu erhalten.Im Popup "Ausdruck auswerten" können Sie mit der rechten Maustaste (Windows) auf das Ergebnis klicken und "Wert kopieren" auswählen, um die gesamte Ausgabe abzurufen und zur Analyse an einer anderen Stelle einzufügen.
quelle
Wir verwenden die Commerce Bug- Erweiterung von Alan Storm und finden sie für das Debuggen einer Vielzahl von Dingen in Magento, einschließlich Layoutproblemen, unverzichtbar. In Layouts können Sie sehen, welche Layout-Handles auf jeder Seite aktiv sind und welche Layout-XML-Konfigurationen auf die Seite angewendet werden.
Es ist nicht kostenlos, spart aber viel Zeit beim Debuggen dieser Art von Dingen.
Hinweis: Ich bin in keiner Weise mit Alan Storm oder Commerce Bug verbunden, sondern nur ein zufriedener Kunde.
quelle
Vielen Dank, Ben Marks! Dies ist meine Version des von Ihnen beschriebenen XML-Layout-Loggers.
Es ist eine sehr lange Datei, also habe ich XML daraus gemacht ... :-) Du kannst sie mit einem normalen Editor öffnen ...
Und meine config.xml sieht im Knoten so aus:
Nun hoffe ich, dass mein Designer all dies erklären kann ... \ o /
quelle
Sie können dies zu Ihrer Controller-Aktion hinzufügen. Es zeigt die Handles übersichtlicher als var_dump.
quelle