Cargar / Obtener un bloque fuera del enrutamiento de Magento para uso externo

15

Tengo una página web externa y estoy tratando de extraer el bloque de encabezado del sitio del marco de trabajo de Magento para usarlo como encabezado en esta página externa. Esto es lo que tengo hasta ahora:

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

Sin embargo, la ejecución se detiene allí y no recibo mensajes de error. Mi objetivo es extraer el bloque Mage_Page_Block_Html_Header, que creo que puedo usar para cargar <block type="page/html_header" name="header" as="header">y todo su contenido desde el archivo de diseño page.xml. Esa etiqueta XML está envuelta dentro

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

etiquetas, así que tal vez necesito especificar eso de alguna manera? No estoy seguro de qué estoy haciendo mal y a dónde ir desde aquí.

Nick Rolando
fuente
este código funciona pero tengo un problema con el botón de cerrar sesión, ¿alguien tiene el mismo problema? Saludos
Massimo Camoni

Respuestas:

12

Encontré el ingrediente secreto ... y es 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();

Gracias @benmarks!

Nick Rolando
fuente
3

Estás 99% allí. Debe llamar a toHtml () en el bloque y luego hacer eco para ver el 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
fuente
Sí, lo he intentado y nada. Sin embargo, esta es la respuesta, lo probé en una nueva instalación y funciona. Gracias.
Nick Rolando
Tengo este código funcionando, sin embargo, no me da casi nada de lo que tiene el encabezado del sitio. El encabezado del sitio tiene varios logotipos, menús y enlaces. Esto me da una de las muchas imágenes en el encabezado. ¿Quizás no lo estoy cargando correctamente?
Nick Rolando