/ / Comment les nœuds xml de la bannière d'entreprise magento sont-ils insérés dans le format xml? - magento, entreprise

Comment les nœuds XML de bannière d'entreprise magento sont-ils insérés dans le XML de mise en page? - magento, entreprise

Contexte

J'ai repris le développement d'un MagentoSite Web d'entreprise qui a un thème personnalisé. Lorsque le thème personnalisé a été créé, les modèles par défaut de base ont été utilisés à la place des modèles par défaut d'entreprise et le thème n'a donc aucune fonctionnalité d'entreprise.

J'ai configuré une installation vanille de Magento Enterprisequi correspond au numéro de version utilisé sur ce site (1.11.1.0) et je travaille lentement à travers la différence des deux sites et l'ajout de la fonctionnalité dans un module à la fois.

Cependant, je me suis heurté à un obstacle avec le fonctionnement de la fonctionnalité de bannière et j'ai donc des problèmes pour essayer de déboguer ce qui manque dans le thème personnalisé pour qu'ils fonctionnent correctement.

Ce que je sais

La fonctionnalité fonctionne bien sur mon site vanilla Enterprise.

Il n'y a pas de fichiers de mise en page XML pour la bannièremodule, ce qui est logique car ils sont créés dynamiquement dans la section d'administration qui vous permet de sélectionner la page / le bloc dans lequel vous souhaitez insérer les widgets de bannière.

En utilisant le bogue du commerce et en regardant le XML de mise en page compilé, les nœuds XML de bannière sont définitivement insérés et ne sont donc pas créés par programme (via PHP) dans d'autres modèles ou blocs.

J'ai regardé à travers le module de bannière et dans les observateurs / événements mais je ne peux rien voir qui soit de quelque importance que ce soit quant à la façon dont les nœuds sont insérés.

Il semble être couplé avec le module Enterprise CMS.

J'ai trouvé des références aux bannières dans le module FPC, mais FPC n'est pas utilisé sur ce site et ces méthodes ne sont pas activées lorsque FPC est désactivé.

J'ai vérifié deux fois et la sortie du module n'est pas désactivée dans Admin Advanced.

J'utilise le module DesignFallbacks avec entreprise / par défaut et cela n'a pas aidé non plus.

J'ai installé des bannières exactement de la même manière sur le site personnalisé que sur le site d'entreprise vanilla, mais le XML compilé n'a pas les nœuds de bannière insérés.

J'ai recherché sur Google et Stack Overflowmais les informations sur les bannières d'entreprise sont très limitées et ce que j'ai pu trouver ne parle que de la section d'administration et non de la façon dont elles fonctionnent à partir du niveau du code.

Tout cela conduit maintenant à ...

Ce que je voudrais savoir

Comment / où les nœuds XML de bannière font leur chemin dans le XML de mise en page.

Réponses:

3 pour la réponse № 1

le Mage_Core_Model_Layout_Update cours à app/code/core/Mage/Core/Model/Layout/Update.php contient le code responsable du chargement du XML de mise en page du package. Normalement, la plupart de ces problèmes sont traités dans le fetchFileLayoutUpdates méthode.

Cependant, il existe une méthode moins connue dans cette classe nommée fetchDbLayoutUpdates. Cette méthode charge le XML de mise à jour de la mise en page de la base de données et le fusionne avec la mise en page du package.

public function fetchDbLayoutUpdates($handle)
{
$_profilerKey = "layout/db_update: ".$handle;
Varien_Profiler::start($_profilerKey);
$updateStr = Mage::getResourceModel("core/layout")->fetchUpdatesByHandle($handle);
if (!$updateStr) {
return false;
}
$updateStr = "<update_xml>" . $updateStr . "</update_xml>";
$updateStr = str_replace($this->_subst["from"], $this->_subst["to"], $updateStr);
$updateXml = simplexml_load_string($updateStr, $this->getElementClass());
$this->fetchRecursiveUpdates($updateXml);
$this->addUpdate($updateXml->innerXml());

Varien_Profiler::stop($_profilerKey);
return true;
}

le Mage::getResourceModel("core/layout") le modèle de ressource correspond au core_layout_update table. Dans Magento Enterprise, ce tableau est l'endroit où les mises à jour de mise en page liées aux bannières sont stockées.

mysql> select * from core_layout_updateG
*************************** 1. row ***************************
layout_update_id: 1
handle: cms_index_index
xml: <reference name="top.container"><block type="enterprise_banner/widget_banner" name="b6d24980179958bad81911d80bce5f36" template="banner/widget/block.phtml"><action method="setData"><name>display_mode</name><value>fixed</value></action><action method="setData"><name>banner_ids</name><value>1</value></action><action method="setData"><name>unique_id</name><value>e2fb0962e605ed01d3759cf531402534</value></action></block></reference>
sort_order: 0
*************************** 2. row ***************************
layout_update_id: 2
handle: cms_index_index
xml: <reference name="footer.before"><block type="enterprise_banner/widget_banner" name="2b2de5c74183936eb4514e860a09e265" template="banner/widget/block.phtml"><action method="setData"><name>display_mode</name><value>fixed</value></action><action method="setData"><name>banner_ids</name><value>2</value></action><action method="setData"><name>unique_id</name><value>1760872fb38c6042c8aee848bf86bf59</value></action></block></reference>

Ce tableau n'est pas spécifiquement pour les mises à jour de bannières - c'est juste que les développeurs du module Enterprise_Banner ont choisi d'utiliser la fonctionnalité de fetchDbLayoutUpdates pour implémenter leurs fonctionnalités.