Eu sempre tenho desafios em identificar as alças apropriadas para tudo, então, por favor, tenha paciência comigo aqui. Vasculhei o Google, o SE e tentei inúmeras variações, sem sorte. (E sim, usei técnicas aqui: Carregamento de layout de depuração , mas não tenho certeza do que fazer com a saída.
O Problema: O controlador é carregado. O layout não.
Quando visito a página em localhost/magento/mymodule/ajax/cart
Ele ecoa 'AQUI!'. O var_dump do getLayouts gera:
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"
}
O código
Controlador personalizado:
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();
}
}
Arquivo de configuração:
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>
Arquivo de layout em
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>
E, finalmente, o arquivo de modelo em
app/design/frontend/theme/theme/template/mymodule/ajaxcart.phtml
<div style="border: 2px solid red">
Hello world
</div>
Por favor informar. Sei que estou perdendo algo óbvio, mas não consigo encontrá-lo.
mycompany_mymodule
prefixo em todos os identificadores? (mycompany_mymodule_ajax
por exemplo).mycompany_mymodule
(primeiro identificador). Cada tag xml que possui o prefixomymodule
sem omycompany_
prefixo é um IMHO ruim. Você deve alterar todos os nomes de tags para ter o prefixomycompany_
antesmymodule
.Respostas:
Para criar um layout simples do Ajax, tente atualizar seu código da seguinte maneira:
Atualize seu controlador para usar loadLayout (false); isso impedirá que o identificador de layout "padrão" seja adicionado.
Em seguida, você pode atualizar o layout xml para simples, basta adicionar o modelo desejado. Você precisará do seguinte para o magento realmente produzir qualquer coisa
name="root" output="toHtml"
Para uma "resposta simples" completa que estará acessível em
/ajaxtest/index/index
você, faça o seguinte:/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
fonte
<block>
tag no arquivo de layout, mas aprendi muito com a sua resposta. Obrigado.