Не удается загрузить пользовательский макет ajax интерфейса для загрузки
У меня всегда возникают проблемы с определением правильных ручек для всего, поэтому, пожалуйста, потерпите меня здесь. Я просмотрел 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>
Пожалуйста, дайте совет. Я знаю, что упускаю что-то очевидное, но ни за что на свете не смогу это найти.
1 answers
Чтобы создать простой возврат макета Ajax, попробуйте обновить свой код следующим образом:
Обновите свой контроллер, чтобы использовать loadLayout(false); это остановит добавление дескриптора макета "по умолчанию".
$this->loadLayout(false);
$this->renderLayout();
Затем вы можете обновить XML-файл макета до простого, просто добавив нужный шаблон. Вам понадобится следующее, чтобы magento действительно выводил что-либо name="root" output="toHtml"
<?xml version="1.0"?>
<layout>
<mymodule_ajax_cart>
<block type="core/template" name="root" output="toHtml" template="mymodule/ajaxcart.phtml" />
</mymodule_ajax_cart>
</layout>
Для полного "простого ответа", который будет доступен в разделе /ajaxtest/index/index
, вы можете выполнить следующее:
/app/etc/modules/Custom_Ajax.xml
<?xml version="1.0"?>
<config>
<modules>
<Custom_Ajax>
<active>true</active>
<codePool>local</codePool>
</Custom_Ajax>
</modules>
</config>
/app/code/local/Custom/Ajax/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<Custom_Ajax>
<version>0.0.1</version>
</Custom_Ajax>
</modules>
<frontend>
<layout>
<updates>
<custom_ajax>
<file>custom_ajax.xml</file>
</custom_ajax>
</updates>
</layout>
<routers>
<ajaxtest>
<use>standard</use>
<args>
<module>Custom_Ajax</module>
<frontName>ajaxtest</frontName>
</args>
</ajaxtest>
</routers>
</frontend>
</config>
/app/design/frontend/base/default/layout/custom_ajax.xml
<?xml version="1.0"?>
<layout>
<ajaxtest_index_index>
<block type="core/template" name="root" output="toHtml" template="custom_ajax.phtml" />
</ajaxtest_index_index>
</layout>
/app/code/local/Custom/Ajax/controllers/IndexController.php
<?php
class Custom_Ajax_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout(false);
$this->renderLayout();
}
}
/приложение/дизайн/интерфейс/база/по умолчанию/шаблон/custom_ajax.phtml
Hello world!