У меня всегда есть проблемы с определением подходящих ручек для всего, поэтому, пожалуйста, потерпите меня здесь. Я просмотрел Google, SE и попробовал множество вариантов, но не повезло. (И да, я использовал здесь методы: отладка загрузки макета , но не уверен, что делать с выводом.
Проблема: контроллер загружается. Макета нет.
Когда я захожу на страницу в localhost/magento/mymodule/ajax/cart
Это отголосок "ЗДЕСЬ!" Var_dump getLayouts генерирует:
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"
}
Код
Пользовательский контроллер:
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();
}
}
Конфиг файл:
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>
Файл макета в
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>
И, наконец, файл шаблона в
app/design/frontend/theme/theme/template/mymodule/ajaxcart.phtml
<div style="border: 2px solid red">
Hello world
</div>
Пожалуйста, порекомендуйте. Я знаю, что упускаю что-то очевидное, но не могу за всю жизнь найти это.
mycompany_mymodule
префикс в каждом дескрипторе? (mycompany_mymodule_ajax
например).mycompany_mymodule
(первая ручка). Каждый тэг xml, у которого есть префиксmymodule
безmycompany_
префикса, плох ИМХО. Вы должны изменить все имена тегов, чтобы иметь префиксmycompany_
раньшеmymodule
.Ответы:
Для создания простого макета возврата Ajax попробуйте обновить код следующим образом:
Обновите ваш контроллер для использования loadLayout (false); это остановит добавление дескриптора макета «по умолчанию».
Затем вы можете обновить свой макет XML до простого, просто добавив нужный шаблон. Вам понадобится следующее для magento, чтобы на самом деле вывести что-нибудь
name="root" output="toHtml"
Для полного «простого ответа», который будет доступен под
/ajaxtest/index/index
вами, вы можете сделать следующее:/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
источник
<block>
тег в файле макета, но я многому научился из вашего ответа. Спасибо.