Last block außerhalb Magento und aktuellen Vorlage anzuwenden
Ich habe eine Magento-installation, die integriert ist mit einer externen website, und ich möchte, dass der Magento Warenkorb-block angezeigt werden, die auf der header dieser fremden Seiten.
Ich erreicht haben Sie dies mit dem folgenden code:
<?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();
Aber ich will (und glauben, dass es möglich ist) ein schöner Ansatz.
Ich mag nicht die Tatsache, dass ich angeben muss das template manuell via setTemplate()
, die mit hard-coding Vorlage Standorte und wiederholte etwas, das er definiert wird woanders (in der design-layout-xml-Dateien). Ich habe versucht, laden Sie den block über $app->getLayout()->getBlock($name)
keine Ergebnisse (wurden $name
stellt die block-Referenz-Namen, wie Sie in den layout-xml-Dateien).
Die Frage ist also:
Gibt es eine Möglichkeit zu Rendern einen block außerhalb magento (mit folgenden Angaben)?
- Ich möchte das Basis-layout von xml-und store-design die layout-updates der design-änderungen werden automatisch geladen, so dass ich nicht brauchen, um geben Sie den Vorlage Pfad und den block-Typ (wieder) manuell.
- Ich möchte zum laden der block wird durch den Referenz-Namen, also ich kann die Eigenschaften angewendet, um es auf die layout-xml-Dateien.
Den Zweck dieser Frage ist, wickeln Sie es in eine Funktion aus, und machen jeden block außerhalb Magento auf die gleiche Weise wie auf der Magento templates. Zum Beispiel:
<div id="sidebar-cart-container">
<?php echo $this->renderMagentoBlock('cart-block-reference-id'); ?>
</div>
Vielen Dank im Voraus.
InformationsquelleAutor azkotoki | 2011-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nahm mir ein paar Minuten-debugging, aber es scheint relativ einfach.
Bitte beachten Sie, dass Sie müssen manuell festlegen, welche layout-handles, die Sie laden möchten blocks aus. Die "Standard" - layout-handle enthält die Seitenleiste, da es dort platziert von innen checkout.xml.
Aber mit dem "default" - layout behandeln können, kommen mit einem erheblichen performance Kosten, da viele Module platzieren Sie Ihre Blöcke in diesem Griff. Können Sie alle die Blöcke, die Sie auf Ihre externe Website in ein eigenes layout-handle und einfach laden.
Haben die Wahl. Viel Glück.
Mage::init()
:Mage::getSingleton('core/session', array('name'=>'frontend'));
Habe ich Probleme bekommen diese zu arbeiten-es stürzt bei $layout->generateBlocks();. Irgendeine Idee warum?
Was ist der Fehler???
Ich nehme an, das helfen würde, nicht wahr? "Fatal error: Mage_Core_Model_Session_Abstract::getMessages(): Das Skript versucht, zum ausführen einer Methode oder der Zugriff auf eine Eigenschaft eines unvollständigen Objekt. Bitte stellen Sie sicher, dass die definition der Klasse "Mage_Core_Model_Message_Collection" des Objekts, die Sie versuchen zu operieren, die geladen wurde, bevor unserialize() aufgerufen wird oder eine __autoload () - Funktion zum laden der Klassendefinition in /home/aendrew/workspace/project/magento/app/code/core/Mage/Core/Model/Session/Abstract.php on line 215". Ich Öffnete eine neue Frage auf stackoverflow.com/questions/13588483
Was ist, wenn ich brauche, um den block übersetzt in einer bestimmten Sprache?
InformationsquelleAutor Daniel Sloof