Carregar / Obter um bloco fora do roteamento Magento para uso externo

15

Eu tenho uma página da web externa e estou tentando extrair o bloco de cabeçalho do site da estrutura Magento para usá-lo como cabeçalho nesta página externa. Isto é o que eu tenho até agora:

// 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');

A execução para aí, no entanto, e não recebo mensagens de erro. Meu objetivo é puxar bloco Mage_Page_Block_Html_Header, que acho que posso usar para carregar <block type="page/html_header" name="header" as="header">e todo o seu conteúdo do arquivo de layout page.xml. Essa tag XML está encapsulada

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

tags, então talvez eu precise especificar isso de alguma forma? Não tenho certeza do que estou fazendo de errado e para onde ir a partir daqui.

Nick Rolando
fonte
esse código funciona, mas eu tenho um problema com o botão de logout, alguém tem o mesmo problema? Atenciosamente
Massimo Camoni

Respostas:

12

Eu encontrei o ingrediente secreto .. e é 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();

Obrigado @benmarks!

Nick Rolando
fonte
3

Você está 99% lá. Você precisa chamar toHtml () no bloco e repetir para ver o resultado:

<?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();
Luke Mills
fonte
Sim, eu tentei isso e nada. Esta é a resposta, porém, eu tentei em uma nova instalação e funciona. Obrigado.
Nick Rolando
Eu tenho esse código funcionando, no entanto, ele não me dá quase nada que o cabeçalho do site tenha. O cabeçalho do site possui vários logotipos, menus e links. Isso me dá uma das muitas imagens no cabeçalho. Talvez eu não esteja carregando corretamente?
Nick Rolando