Magento Ajax - comment afficher par programme personnalisé bloc de Contrôleur (mon contenu HTML est toujours vide)
J'essaie d'afficher un bloc dans le cadre d'une réponse à un appel ajax.
Tout fonctionne sauf que je ne peut pas obtenir le contrôleur pour faire écho au modèle de code HTML.
Mon module de classe:
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;
}
}
}
À l'intérieur de mon fichier de modèle du produit.phtml - ce le HTML n'est jamais montré.
(enregistré dans app/design/frontend/default/default/template/mymodule_ajax/produit.phtml)
<div>HERE!</div>
Mon bloc de classe:
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;
}
}
Mon 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>
Je suis en supposant que parce que je suis en train d'ouvrir le modèle par programmation dans mon bloc de la classe, je ne devrais pas besoin de la référence de module?
Suppression de la référence ne fait aucune différence.
Je n'obtiens pas d'erreurs PHP, le HTML affiché rend
<html>
<head></head>
<body></body>
</html>
Je ne peux tout simplement pas comprendre ce que je fais de mal?
Je suis en utilisant Magento CE 1.8.1
OriginalL'auteur Natacha Beaugeais | 2014-04-27
Vous devez vous connecter pour publier un commentaire.
- Je trouver ces choses très difficiles. Je vais essayer de répondre en deux parties:
LA PREMIÈRE PARTIE
Vous voudrez peut-être essayer de rendre la mise en page dans le contrôleur, donc essayez dans un premier temps, puis de lire les articles ci-dessous:
MAIS vous faites un module Ajax. Vous pouvez donc les utiliser de contrôleur des méthodes telles que:
Et si vous voulez
setBody()
à un bloc de code HTML, puis dans le contrôleur du code que vous avez posté ci-dessus est à la recherche de bonnes (mais voir la partie suivante):-Et en fait même appeler juste
exit();
à la fin deindexAction()
vider le tampon de sortie PHP pour le navigateur.Je note que vous faites un contrôleur de produit. Étudier le code dans la classe que vous l'extension peut aider:
qui pourrait vous donner quelques idées sur l'envoi de Magento-standard liés à un produit de HTML au navigateur. Vous pouvez trouver la
prepareAndRender()
fonction d'assistance de plus intéressant, mais en fin de compte il utilise$this->renderLayout()
pour créer la sortie html (ici$this
est le contrôleur).PARTIE DEUX
Je pense que vous devez vous concentrer sur la ligne de votre code:
et soit changer de
ou, dans votre module config.xml fichier ajouter quelque chose comme: (je pense que c'est la réponse vous avez besoin d')
de sorte que Magento peut comprendre que
createBlock('ajax/product')
signifieMyModule_Ajax_Block_Product
et pasMage_Ajax_Block_Product
.Je vous recommandons également de changer
MyModule
àMymodule
tout au long de sorte qu'il n'est pas une lettre majuscule dans le milieu. Parce quebien, je ne comprends pas les détails mais en général, Magento fera
mymodule
enMymodule
pasMyModule
Cela fait-il sens?
JE VOUS REMERCIE. Votre réponse détaillée, des explications etc m'a conduit sur le chemin de la résolution. En fin de compte, c'était l'appellation de mon bloc dans le code, et la fausse appellation de mon fichier de modèle et de la structure de dossier - Le système ne pouvais pas trouver mon modèle, mais au lieu de me dire alors, c'était de retourner une chaîne vide. Celui-ci a été super dur de suivre et de debug!!
OriginalL'auteur Malachy