Charger / obtenir un bloc en dehors du routage Magento pour une utilisation externe

15

J'ai une page Web externe et j'essaie d'extraire le bloc d'en-tête du site du framework Magento pour l'utiliser comme en-tête dans cette page externe. Voici ce que j'ai jusqu'à présent:

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

L'exécution s'arrête là, cependant, et je ne reçois aucun message d'erreur. Mon objectif est d'extraire le bloc Mage_Page_Block_Html_Header, que je pense pouvoir utiliser pour charger <block type="page/html_header" name="header" as="header">et tout son contenu à partir du fichier de mise en page page.xml. Cette balise XML est enveloppée à l'intérieur

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

balises, alors peut-être que je dois spécifier cela en quelque sorte? Je ne sais pas ce que je fais mal et où aller d'ici.

Nick Rolando
la source
ce code fonctionne mais j'ai un problème avec le bouton de déconnexion, certains ont le même problème? Cordialement
Massimo Camoni

Réponses:

12

J'ai trouvé l'ingrédient secret .. et c'est 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();

Merci @benmarks!

Nick Rolando
la source
3

Vous y êtes à 99%. Vous devez appeler toHtml () sur le bloc, puis l'écho pour voir le résultat:

<?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
la source
Oui, j'ai essayé ça et rien. Ceci est la réponse cependant, je l'ai essayé sur une nouvelle installation et cela fonctionne. Merci.
Nick Rolando
J'ai fait fonctionner ce code, mais il ne me donne presque rien de l'en-tête du site. L'en-tête du site comporte plusieurs logos, menus et liens. Cela me donne une des nombreuses images dans l'en-tête. Peut-être que je ne le charge pas correctement?
Nick Rolando