/ / Як вставляються вузли xml банера magento для підприємств у макет xml? - magento, підприємство

Як вбудовані xml-вузли баннера підприємства magento в xml макета? - magento, підприємство

Передумови

Я взяв на себе розробку MagentoПідприємницький веб-сайт із власною темою. Коли створювалася спеціальна тема, використовувались базові шаблони за замовчуванням, а не шаблони корпоративних за замовчуванням, і тому тема не має жодної корпоративної функціональності.

Я налаштував ванільну установку Magento Enterpriseякий відповідає номеру версії, що використовується на цьому веб-сайті (1.11.1.0), і я повільно працюю, розрізняючи два сайти та додаючи функціональність назад в один модуль за раз.

Однак я зіткнувся з перешкодами щодо того, як працює функція банера, і тому у мене виникають проблеми при спробі налагодити те, чого не вистачає в користувацькій темі, щоб вони працювали правильно.

Що я знаю

Функціонал чудово працює на моєму веб-сайті vanilla Enterprise.

Для банера немає файлів XML-макетамодуль, що має сенс, оскільки вони створюються динамічно в розділі адміністратора, що дозволяє вибрати сторінку / блок, в який ви хочете вставити віджети банера.

Використовуючи комерційну помилку та дивлячись на скомпільований макет сторінки XML, банери XML-вузли, безумовно, вставляються, тому не створюються програмно (через PHP) в інших шаблонах або блоках.

Я переглянув модуль банерів та спостереження / події, але не бачу нічого, що має якесь відношення до того, як вставляються вузли.

Здається, це пов'язано з модулем Enterprise CMS.

Я знайшов посилання на банери в модулі FPC, але FPC не використовується на цьому веб-сайті, і ці методи не вражаються, коли FPC вимкнено.

Я двічі перевірив, і вихід модуля не вимкнено в Admin Advanced.

Я використовую модуль DesignFallbacks з підприємством / за замовчуванням, і це теж не допомогло.

Я встановив деякі банери точно так само, як на власному сайті, як і на ванільному корпоративному сайті, однак у складеному XML немає вставлених вузлів банерів.

Я шукав у Google та Stack Overflowале інформація про Enterprise Banners дуже обмежена, і те, що я міг знайти, говорить лише про розділ адміністратора, а не про те, як вони функціонують з рівня коду.

Усе це тепер веде до ...

Що я хотів би знати

Як / де банери XML-вузли проникають у макет XML.

Відповіді:

3 для відповіді № 1

The Mage_Core_Model_Layout_Update клас на app/code/core/Mage/Core/Model/Layout/Update.php містить код, відповідальний за завантаження макета пакета XML. Зазвичай більша частина цього обробляється в fetchFileLayoutUpdates метод

Однак у цьому класі існує менш відомий метод fetchDbLayoutUpdates. Цей метод завантажує XML оновлення макета з бази даних і зливає його з макетом пакунка.

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") Модель ресурсу відповідає core_layout_update таблиця. У Magento Enterprise в цій таблиці зберігаються оновлення макета, пов’язані з банерами.

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>

Ця таблиця не спеціально для оновлення банерів - це просто те, що розробники модуля Enterprise_Banner вирішили використовувати функціональність fetchDbLayoutUpdates реалізувати їх особливості.