/ / W jaki sposób węzły xml banerów korporacyjnych magento są wstawiane do szablonu xml? - magento, przedsiębiorstwo

W jaki sposób węzły xml baneru przedsiębiorstwa magento są wstawiane do układu xml? - magento, przedsiębiorstwo

tło

Przejąłem rozwój MagentoWitryna internetowa firmy z motywem niestandardowym. Podczas tworzenia kompozycji niestandardowej używano podstawowych szablonów domyślnych zamiast domyślnych szablonów korporacyjnych, dlatego kompozycja nie ma żadnych funkcji korporacyjnych.

Skonfigurowałem waniliową instalację Magento Enterprisektóry odpowiada numerowi wersji używanej w tej witrynie (1.11.1.0) i powoli pracuję nad porównywaniem dwóch witryn i dodawaniem funkcji z powrotem w jednym module na raz.

Jednak napotkałem przeszkodę związaną z działaniem funkcji banera i dlatego mam problemy z debugowaniem tego, czego brakuje w niestandardowym motywie, aby działały poprawnie.

Co ja wiem

Funkcjonalność działa dobrze w mojej podstawowej witrynie Enterprise.

Nie ma plików XML układu dla baneramoduł, co ma sens, ponieważ są tworzone dynamicznie w sekcji administratora, co pozwala wybrać, do której strony / bloku chcesz wstawić widżety banerów.

Korzystając z błędu handlowego i patrząc na skompilowany XML układu strony, węzły XML banera są zdecydowanie wstawiane, więc nie są tworzone programowo (przez PHP) w innych szablonach lub blokach.

Przejrzałem moduł banerowy i obserwatorów / zdarzenia, ale nie widzę niczego, co ma jakiekolwiek znaczenie dla sposobu wstawiania węzłów.

Wydaje się, że jest on połączony z modułem Enterprise CMS.

Znalazłem odniesienia do Banerów w module FPC, ale FPC nie jest używane na tej stronie i te metody nie są stosowane, gdy FPC jest wyłączone.

Sprawdziłem dwukrotnie i wyjście modułu nie jest wyłączone w programie Admin Advanced.

Używam modułu DesignFallbacks z enterprise / default i to też nie pomogło.

Skonfigurowałem niektóre banery w dokładnie taki sam sposób w witrynie niestandardowej, jak w zwykłej witrynie przedsiębiorstwa, jednak skompilowany plik XML nie zawiera wstawianych węzłów banerów.

Szukałem w Google i Stack Overflowale informacje na temat banerów korporacyjnych są bardzo ograniczone i to, co udało mi się znaleźć, dotyczy tylko sekcji administracyjnej, a nie tego, jak działają z poziomu kodu.

Wszystko to prowadzi teraz do ...

Co chciałbym wiedzieć

Jak / gdzie węzły XML banerów trafiają do układu XML układu.

Odpowiedzi:

3 dla odpowiedzi № 1

The Mage_Core_Model_Layout_Update klasa w app/code/core/Mage/Core/Model/Layout/Update.php zawiera kod odpowiedzialny za ładowanie XML układu pakietu. Zwykle większość tego jest obsługiwana w fetchFileLayoutUpdates metoda.

Jednak w tej klasie istnieje mniej znana metoda o nazwie fetchDbLayoutUpdates. Ta metoda ładuje plik XML aktualizacji układu z bazy danych i scala go z układem pakietu.

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;
}

The Mage::getResourceModel("core/layout") model zasobów odpowiada core_layout_update stół. W Magento Enterprise w tej tabeli są przechowywane aktualizacje układu związane z banerami.

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>

Ta tabela nie jest przeznaczona specjalnie do aktualizacji banerów - po prostu programiści modułu Enterprise_Banner zdecydowali się użyć funkcji fetchDbLayoutUpdates zaimplementować ich funkcje.