Bloc de charge à l'extérieur de Magento, et d'appliquer le modèle courant

J'ai une installation de Magento qui est intégré à un site web externe, et je veux le Magento panier bloc à afficher sur l'en-tête de ce site externe.

J'ai réalisé ceci avec le code suivant:

<?php

require_once(dirname(__FILE__).'/store/app/Mage.php');

$app = Mage::app();
$session = Mage::getSingleton('core/session', array('name'=>'frontend'));

$block = $app
    ->getLayout()
    ->getBlockSingleton('checkout/cart_sidebar')
    ->setTemplate('checkout/cart/sidebar.phtml');

echo $block->toHtml();

Mais, je veux (et croyez que c'est possible) une meilleure approche.

Je n'aime pas le fait que je dois spécifier le modèle manuellement par l'intermédiaire de setTemplate(), qui consiste à coder en dur des emplacements du modèle et de la répétition de quelque chose qu'il est défini à un autre endroit, dans la conception de mise en page des fichiers xml). J'ai essayé de charger le bloc via $app->getLayout()->getBlock($name) sans résultats ($name représente le bloc du nom de la référence, tel que défini dans la mise en page des fichiers xml).

La question est donc:

Est-il possible de rendre un bloc à l'extérieur de magento (avec les exigences suivantes)?

  • Je veux la présentation de la base xml et le magasin de conception de mise en page des mises à jour de la conception des modifications à être chargé automatiquement, donc je n'ai pas besoin de spécifier le chemin d'accès du modèle et le type de bloc (nouveau) à la main.
  • Je veux charger le bloc par son nom de référence, afin que je puisse utiliser les propriétés sont appliquées sur la mise en page des fichiers xml.

Le but de cette question est de l'envelopper dans une fonction, et de rendre tous les blocs à l'extérieur de Magento de la même façon, c'est fait sur le Magento templates. Par exemple:

<div id="sidebar-cart-container">
    <?php echo $this->renderMagentoBlock('cart-block-reference-id'); ?>
</div>

Merci d'avance.

OriginalL'auteur azkotoki | 2011-06-14