J'ai toujours du mal à identifier les poignées appropriées pour tout, alors soyez indulgent avec moi ici. J'ai parcouru Google, SE et essayé une myriade de variantes, sans succès. (Et oui, j'ai utilisé des techniques ici: débogage du chargement de mise en page , mais je ne sais pas quoi faire avec la sortie.
Le problème: le contrôleur se charge. La mise en page ne fonctionne pas.
Quand je visite la page à localhost/magento/mymodule/ajax/cart
Il fait écho «ICI!». Le var_dump des getLayouts génère:
array(4) {
[0]=> string(17) "mymodule_ajax_cart"
[1]=> string(13) "STORE_default"
[2]=> string(24) "THEME_frontend_theme_theme"
[3]=> string(19) "customer_logged_out"
}
Le code
Contrôleur personnalisé:
app/code/local/mycompany/mymodule/controllers/AjaxController.php
class Mycompany_Mymodule_AjaxController extends Mage_Core_Controller_Front_Action
{
public function cartAction() {
echo 'HERE!';
$this->loadLayout('mymodule_ajax_cart');
var_dump($this->getLayout()->getUpdate()->getHandles());
$this->renderLayout();
}
}
Fichier de configuration:
app/code/local/mycompany/mymodule/etc/config.xml
<config>
<modules>
<mycompany_mymodule>
<version>1.0.0</version>
</mycompany_mymodule>
</modules>
<global>
<helpers>
<mymodule>
<class>Mycompany_Mymodule_Helper</class>
</mymodule>
</helpers>
</global>
<frontend>
<routers>
<mymodule>
<use>standard</use>
<args>
<module>Mycompany_Mymodule</module>
<frontName>mymodule</frontName>
</args>
</mymodule>
</routers>
<layout>
<updates>
<mymodule>
<file>mymodule.xml</file>
</mymodule>
</updates>
</layout>
</frontend>
</config>
Fichier de mise en page à
app/design/frontent/base/default/layout/mymodule.xml
<?xml version="1.0"?>
<layout>
<mymodule_ajax>
<block type="core/text_list" name="content" output="toHtml" as="content" />
</mymodule_ajax>
<mymodule_ajax_cart>
<reference name="content">
<block type="core/template" template="mymodule/ajaxcart.phtml" />
</reference>
</mymodule_ajax_cart>
</layout>
Et enfin, le fichier modèle à
app/design/frontend/theme/theme/template/mymodule/ajaxcart.phtml
<div style="border: 2px solid red">
Hello world
</div>
S'il vous plaît donnez votre avis. Je sais que je manque quelque chose d'évident, mais je ne peux pas le trouver pour la vie.
mycompany_mymodule
préfixe dans chaque poignée? (mycompany_mymodule_ajax
par exemple).mycompany_mymodule
(première poignée). Chaque balise xml qui a le préfixemymodule
sans lemycompany_
préfixe est mauvaise à mon humble avis. Vous devez modifier tous les noms de balises pour avoir le préfixemycompany_
avantmymodule
.Réponses:
Pour créer un retour de mise en page Ajax simple, essayez de mettre à jour votre code comme suit:
Mettez à jour votre contrôleur pour utiliser loadLayout (false); cela empêchera l'ajout de la poignée de présentation "par défaut".
Ensuite, vous pouvez mettre à jour votre XML de mise en page en ajoutant simplement le modèle que vous souhaitez. Vous aurez besoin des éléments suivants pour que magento produise réellement quoi que ce soit
name="root" output="toHtml"
Pour une "réponse simple" complète qui sera accessible sous
/ajaxtest/index/index
vous pouvez faire ce qui suit:/app/etc/modules/Custom_Ajax.xml
/app/code/local/Custom/Ajax/etc/config.xml
/app/design/frontend/base/default/layout/custom_ajax.xml
/app/code/local/Custom/Ajax/controllers/IndexController.php
/app/design/frontend/base/default/template/custom_ajax.phtml
la source
<block>
balise dans le fichier de mise en page, mais j'ai beaucoup appris de votre réponse. Je vous remercie.