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
Vous devez vous connecter pour publier un commentaire.
M'a fallu quelques minutes de débogage, mais il semble relativement facile.
Veuillez noter que vous devez spécifier manuellement la mise en page des poignées vous souhaitez charger des blocs de. Le "défaut" de mise en page poignée contiendra la barre latérale, car il est placé à l'intérieur de checkout.xml.
Mais en utilisant le "défaut" de mise en page de la poignée peut venir avec une performance significative les coûts, car de nombreux modules de placer les blocs dans cette poignée. Vous voulez peut-être placer tous les blocs que vous utilisez sur votre site externe dans une disposition distincte de la poignée et il suffit de les charger.
Le choix est le vôtre. Bonne chance.
Mage::init()
:Mage::getSingleton('core/session', array('name'=>'frontend'));
Je vais avoir des problèmes à obtenir que cela fonctionne, -- il se bloque à $layout->generateBlocks();. Aucune idée pourquoi?
Quelle est l'erreur?
Je suppose que cela pourrait l'aider, hein? "Erreur fatale: Mage_Core_Model_Session_Abstract::getMessages(): Le script essayé d'exécuter une méthode ou d'accéder à une propriété d'un incomplètes objet. Veuillez vous assurer que la définition de la classe "Mage_Core_Model_Message_Collection" de l'objet que vous essayez de faire fonctionner sur a été chargée avant de unserialize() est appelée, ou de fournir un __autoload() la fonction de charge de la définition de la classe dans /home/aendrew/workspace/project/magento/app/code/core/Mage/Core/Model/Session/Abstract.php sur la ligne 215". J'ai Ouvert une nouvelle question dans le stackoverflow.com/questions/13588483
Que faire si je dois obtenir le bloc traduits dans une langue spécifique?
OriginalL'auteur Daniel Sloof