Laden / Holen Sie sich einen Block außerhalb des Magento-Routings zur externen Verwendung

15

Ich habe eine externe Webseite und versuche, den Site-Header-Block aus dem Magento-Framework zu ziehen, um ihn als Header auf dieser externen Seite zu verwenden. Das habe ich bisher:

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

Die Ausführung wird dort jedoch angehalten und es werden keine Fehlermeldungen angezeigt. Mein Ziel ist es, einen Block aus der page.xml-Layout-Datei zu ziehen Mage_Page_Block_Html_Header, mit dem ich glaube, <block type="page/html_header" name="header" as="header">alle Inhalte laden zu können. Dieses XML-Tag wird in das Dokument eingebunden

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

Tags, also muss ich das vielleicht irgendwie spezifizieren? Ich bin mir nicht sicher, was ich falsch mache und wohin ich von hier aus gehen soll.

Nick Rolando
quelle
Dieser Code funktioniert, aber ich habe ein Problem mit der Abmeldeschaltfläche. Grüße
Massimo Camoni

Antworten:

12

Ich habe die geheime Zutat gefunden ... und es ist 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();

Danke @benmarks!

Nick Rolando
quelle
3

Du bist zu 99% da. Sie müssen toHtml () für den Block aufrufen und dann ausgeben, um das Ergebnis zu sehen:

<?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
quelle
Ja, das habe ich probiert und nichts. Dies ist die Antwort, ich habe es bei einer Neuinstallation versucht und es funktioniert. Vielen Dank.
Nick Rolando
Ich habe diesen Code funktioniert, aber es gibt mir nichts, was der Site-Header hat. Der Site-Header enthält mehrere Logos, Menüs und Links. Dies gibt mir eines der vielen Bilder in der Kopfzeile. Vielleicht lade ich es nicht richtig?
Nick Rolando