Magento Ajax - how, um programmgesteuert anzeigen benutzerdefinierter block vom Controller (dem HTML-Inhalt ist immer leer)
Ich versuche, eine Anzeige zu blockieren, die als Teil einer Antwort auf eine ajax-call.
Alles funktioniert, außer, dass ich nicht den controller auf der echo-Vorlage, HTML-code.
Mein Modul class:
class MyModule_Ajax_ProductController extends Mage_Catalog_ProductController {
public function indexAction() {
if ($product = $this->_initProduct()) {
echo '<div>hello</div>'; //this works
echo $this->getLayout()->createBlock('ajax/product')->setTemplate('mymodule_ajax/product.phtml')->toHtml();
//I also tried:
//$layout = $this->getLayout();
//$update = $layout->getUpdate();
//$update->load('ajax_product_index');
//$layout->generateXml();
//$layout->generateBlocks();
//$output = $layout->getOutput();
//echo $output;
}
}
}
Innerhalb meiner template-Datei Produkt.phtml - dieses HTML wird nie gezeigt.
(gespeichert in app/design/frontend/default/default/template/mymodule_ajax/Produkt.phtml)
<div>HERE!</div>
Mein block-Klasse:
class MyModule_Ajax_Block_Product extends Mage_Catalog_Block_Product
{
private $product;
protected function _construct()
{
parent::_construct();
$this->setTemplate('mymodule_ajax/product.phtml');
}
protected function _toHtml() {
return parent::_toHtml();
}
public function setProduct($product) {
$this->product = $product;
return $this;
}
public function getProduct() {
return $this->product;
}
}
Meine layout/mymodule_ajax.xml
<?xml version="1.0"?>
<layout>
<ajax_product_index>
<reference name="root">
<block type="ajax/project" name="root" output="toHtml" template="mymodule_ajax/product.phtml"/>
</reference>
</ajax_product_index>
</layout>
Ich gehe davon aus, dass, weil ich bin einrichten die Vorlage programmgesteuert in meinem block-Klasse, die ich nicht benötigen, sollten Sie das Modul verweisen?
Das entfernen der Referenz macht keinen Unterschied.
Bekomme ich keine PHP-Fehler, der HTML angezeigt rendert
<html>
<head></head>
<body></body>
</html>
Ich kann einfach nicht herausfinden, was ich falsch mache?
Ich bin mit Magento CE 1.8.1
InformationsquelleAutor Natacha Beaugeais | 2014-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich finde diese Dinge sehr schwierig. Ich werde versuchen, eine Antwort in zwei teilen:
TEIL EINER
Möchten Sie vielleicht, um zu versuchen, um das layout dargestellt in die Steuerung, so versuchen Sie dies zuerst, dann Lesen Sie die zusätzlichen Elemente, unten:
ABER Sie machen eine Ajax-Modul. So möchten Sie vielleicht nutzen die controller-Methoden wie:
Und wenn Sie wollen
setBody()
zu einem block HTML dann in der controller-code, den Sie oben gepostet hast sieht gut aus (siehe aber Teil zwei unten):-Und eigentlich auch nur zum telefonieren
exit();
am EndeindexAction()
wird, Spülen Sie den PHP-output-buffer an den browser.Ich beachten Sie, dass Sie eine Produkt-controller. Studieren Sie den code in der Klasse, die Sie erweitern können helfen:
welche geben könnten Sie einige Ideen über das senden von Magento-standard-Produkt-bezogene HTML an den browser. Finden Sie die
prepareAndRender()
Hilfsfunktion mehr interessant, aber letztlich nutzt es$this->renderLayout()
zum erstellen der html-Ausgabe (hier$this
ist der controller).TEIL ZWEI
Ich glaube, Sie brauchen, um konzentrieren sich auf die Zeile in deinem code:
und ändern Sie es zu
oder, in des Moduls config.xml Datei-fügen Sie so etwas wie: (ich denke, das ist die Antwort, die Sie brauchen)
so, dass Magento kann verstehen, dass
createBlock('ajax/product')
bedeutetMyModule_Ajax_Block_Product
und nichtMage_Ajax_Block_Product
.Ich auch empfehlen, die Sie ändern
MyModule
zuMymodule
im ganzen, so dass es nicht einen Großbuchstaben in der Mitte. Dagut, ich verstehe nicht, die feinen details aber in der Regel wird Magento machen
mymodule
inMymodule
nichtMyModule
Macht das Sinn?
DANKE. Deine ausführliche Antwort, Erklärungen etc führte mich auf den Pfad zu einer Auflösung. Am Ende war es der Benennung von mein block in den code, und die falsche Benennung von meiner template-Datei und Ordner - Struktur, Das system konnte nicht finden, meine Vorlage, aber anstatt mir zu sagen, ja, es war die Rückgabe ein leerer string. Das war super schwer zu verfolgen und zu Debuggen!!
InformationsquelleAutor Malachy