Загрузить / получить блок вне маршрутизации Magento для внешнего использования

15

У меня есть внешняя веб-страница, и я пытаюсь извлечь блок заголовка сайта из инфраструктуры Magento для использования в качестве заголовка на этой внешней странице. Это то, что я до сих пор:

// initialize Magento
$rootPath = dirname(dirname(__FILE__));
$mageInc = $rootPath . "/app/Mage.php";
include_once $mageInc;

Mage::app('admin')->setCurrentStore(0);

$headerBlock = Mage::app()->getLayout()->createBlock('page/html_header');
//also tried
//$headerBlock = Mage::app()->getLayout()->createBlock('page/html_header', 'header');

Однако выполнение на этом останавливается, и я не получаю сообщений об ошибках. Моя цель - извлечь блок Mage_Page_Block_Html_Header, который, я думаю, я могу использовать для загрузки <block type="page/html_header" name="header" as="header">и всего его содержимого из файла макета page.xml. Этот тег XML заключен в

<default translate="label" module="page">
  <block type="page/html" name="root" output="toHtml" template="page/1column.phtml">

теги, так что, может быть, мне нужно как-то это указать? Я не уверен, что я делаю неправильно и куда идти отсюда.

Ник Роландо
источник
этот код работает, но у меня проблема с кнопкой выхода из системы, у кого-то такая же проблема? С уважением
Массимо Камони

Ответы:

12

Я нашел секретный ингредиент .. и это Mage::app()->loadArea('frontend');

<?php
include_once "app/Mage.php";
umask(0);
Mage::app()->loadArea('frontend');

$layout = Mage::getSingleton('core/layout');

//load default xml layout handle and generate blocks
$layout->getUpdate()->load('default');
$layout->generateXml()->generateBlocks();

//get the loaded head and header blocks and output
$headBlock = $layout->getBlock('head');
$headerBlock = $layout->getBlock('header');
echo $headBlock->toHtml() . $headerBlock->toHtml();

Спасибо @benmarks!

Ник Роландо
источник
3

Ты там на 99%. Вам нужно вызвать toHtml () для блока, а затем отобразить его, чтобы увидеть результат:

<?php
// initialize Magento
$rootPath = dirname(dirname(__FILE__));
$mageInc = $rootPath . "/app/Mage.php";
include_once $mageInc;

Mage::app('admin')->setCurrentStore(0);

echo $headerBlock = Mage::app()->getLayout()->createBlock('page/html_header')->toHtml();
Люк Миллс
источник
Да, я пробовал это и ничего. Это ответ, хотя, я попробовал его на новой установке, и он работает. Благодарю.
Ник Роландо
Я получил этот код, работающий, однако он не дает мне ничего похожего на заголовок сайта. Заголовок сайта содержит несколько логотипов, меню и ссылок. Это дает мне одно из многих изображений в шапке. Возможно я не загружаю это правильно?
Ник Роландо