TL; DR: existe-t-il un moyen de déboguer le chargement de la mise en page? Comme je crois que la disposition d'un module est en conflit avec un autre.
En rapport avec une question précédente que j'ai faite: Comment faire pour qu'une disposition de module soit montrée sur tous les thèmes
J'ai chargé avec succès mon module sur mon environnement de test local (mon PC de développement), testé la commutation entre 3 thèmes différents et tout va bien. Ensuite, j'ai mis à jour le module sur l'environnement de test ou de "pré-production" que nous avons, où il y a beaucoup de modules différents, certains propriétaires, que nous avons fabriqués. Sur cet environnement, le module ne montre pas ce qui est nécessaire sur la page d'accueil du produit. Après quelques tests, je parviens finalement à la conclusion que le problème devrait être lié au processus de chargement de la mise en page.
Alors, y at-il un moyen de déboguer le chargement de la mise en page, comment différents modules remplacent ou ajoutent leurs propres blocs? Mon point est que je crois qu’au moins un module devrait être en conflit avec le mien. Et comme nous avons tellement de modules, je cherche une approche différente de la désactivation des modules un par un et je vois quelle est la problématique.
Mon fichier config.xml est:
<?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>
Mon fichier d'observateur:
<?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;
....
....
}
Ceci est mon fichier de mise en page:
<?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>
Auparavant eu un légèrement différent où au lieu de <default></default>
moi <Product_Campaign_Banner></Product_Campaign_Banner>
. Cela a également fonctionné.
Mon fichier product.phtml:
<div class="visual">
<?php echo $this->showCampaign(); ?>
</div>
Le product.phtml
fichier n'est pas chargé et par conséquent, il showCampaign
n'est pas exécuté et il existe tous les fichiers HTML nécessaires.
Réponses:
Vous pouvez consigner les directives XML de présentation compilées utilisées pour générer des blocs. Créez un observateur sur
controller_action_layout_generate_blocks_before
et, dans la méthode observer, enregistrez le code XML de mise à jour à partir de l'objet de présentation transporté:La sortie sera similaire à:
la source
controller_action_layout_generate_blocks_before
" - Ceci est une question M1.Vous pouvez récupérer tous les descripteurs de mise en page de votre contrôleur en procédant comme suit:
Ou n'importe où (tant que la mise en page a été initialisée) en utilisant ceci:
Cela vous aidera peut-être à déboguer.
MODIFIER
Avez-vous configuré votre fichier config.xml pour spécifier la classe de bloc?
la source
core/template
? Ceci est juste pour annuler les erreurs dans les paramètres de votre module.J'utilise PhpStorm avec Magicento et j'ai donc pensé adapter la réponse de @benmarks à mon utilisation.
Dans PhpStorm, ouvrez
app/code/core/Mage/Core/Controller/Varien/Action.php
et mettez un point de rupture dans la méthodegenerateLayoutBlocks()
. Je pense que le but est de l'insérer n'importe où avant$this->getLayout()->generateBlocks();
. Je le mets sur la ligne précédente.Après avoir inséré le point d'arrêt, indiqué par le point rouge à gauche par le numéro de ligne, vous pouvez cliquer dessus avec le bouton droit de la souris pour personnaliser le comportement. Cliquez sur "Plus" en bas pour ouvrir toutes les options.
Une fois que vous l'ouvrez, vous cochez la case "Consigner le message sur la console" (facultatif) et "Consigner l'expression évaluée" (où la magie opère). Copiez ensuite cette adaptation du code de benmark dans la zone de texte. La seule chose que j'ai changée est d'épeler la
$request
variable, comme àMage::app()->getRequest()
chaque fois, et de la changer$o
en$this
(b / c, nous ne sommes pas dans le contexte de l'observateur ici).Alors maintenant, ça ressemble à ça:
Après avoir exécuté le programme (à l'aide de xdebug ou du débogueur zend), vous vous arrêtez au point d'arrêt et consultez le journal:
Il semble y avoir une limite de taille pour les entrées de journal qui pourrait être déterminée par la
idea.cycle.buffer.size
propriété dans leidea.properties
fichier pour PhpStorm, selon cela . Vous pouvez changer cela ou simplement cliquer avec le bouton droit de la souris sur la fenêtre de code et sélectionner "Evaluer l'expression" dans le menu déroulant, puis copier et coller le code à exécuter, et vous obtiendrez le résultat complet.Dans la fenêtre contextuelle "Evaluer Expression", vous pouvez cliquer sur le résultat avec le bouton droit de la souris (Windows) et sélectionner "Copier la valeur" pour obtenir l'intégralité de la sortie et la coller ailleurs pour analyse.
la source
Nous utilisons l' extension Commerce Bug d' Alan Storm et nous la trouvons indispensable pour déboguer une variété d'éléments dans Magento, y compris des problèmes de mise en page. Pour les mises en page, vous pouvez voir quelles poignées de mise en page sont actives sur chaque page et quelles configurations XML de mise en page sont appliquées à la page.
Ce n'est pas gratuit, mais vous gagnerez beaucoup de temps à déboguer ce genre de choses.
Remarque: je ne suis en aucun cas affilié à Alan Storm ou Commerce Bug, mais à un client satisfait.
la source
Merci Ben Marks! Ceci est ma version de l'enregistreur de mise en page XML que vous avez décrit.
C'est un très long fichier donc j'en ai fait du XML ... :-) Vous pouvez ouvrir avec un éditeur normal ....
Et mon config.xml ressemble à ceci dans le nœud:
Maintenant, j'espère que mon designer pourra expliquer tout cela ... \ o /
la source
Vous pouvez ajouter ceci à votre action de contrôleur. Il montrera les poignées de manière plus soignée que var_dump.
la source