Ich habe immer Probleme, die richtigen Griffe für alles zu finden. Bitte nehmen Sie hier Kontakt mit mir auf. Ich habe Google, SE durchsucht und unzählige Variationen ausprobiert, ohne Glück. (Und ja, ich habe hier Techniken verwendet: Debuggen des Ladens von Layouts , bin mir aber nicht sicher, was ich mit der Ausgabe tun soll.
Das Problem: Der Controller wird geladen. Das Layout nicht.
Wenn ich die Seite unter besuche localhost/magento/mymodule/ajax/cart
Es hallt "HIER!". Der var_dump der getLayouts generiert:
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"
}
Der Code
Benutzerdefinierte Steuerung:
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();
}
}
Konfigurationsdatei:
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>
Layoutdatei bei
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>
Und schließlich die Vorlagendatei unter
app/design/frontend/theme/theme/template/mymodule/ajaxcart.phtml
<div style="border: 2px solid red">
Hello world
</div>
Bitte beraten. Ich weiß, dass mir etwas Offensichtliches fehlt, aber ich kann es für mein ganzes Leben nicht finden.
mycompany_mymodule
in jedem Handle ein Präfix verwenden? (mycompany_mymodule_ajax
zum Beispiel).mycompany_mymodule
(erstes Handle). Jedes XML-Tag, das das Präfixmymodule
ohnemycompany_
Präfix hat, ist meiner Meinung nach schlecht. Sie sollten alle Tag-Namen so ändern, dass sie das Präfixmycompany_
habenmymodule
.Antworten:
Um eine einfache Ajax-Layout-Rückgabe zu erstellen, aktualisieren Sie Ihren Code wie folgt:
Aktualisieren Sie Ihren Controller, um loadLayout (false) zu verwenden. Dadurch wird das Hinzufügen des "Standard" -Layout-Handles gestoppt.
Als nächstes können Sie Ihre Layout-XML so aktualisieren, dass sie einfach die gewünschte Vorlage hinzufügt. Für Magento benötigen Sie Folgendes, um tatsächlich etwas auszugeben
name="root" output="toHtml"
Für eine vollständige "einfache Antwort", auf die unter
/ajaxtest/index/index
zugegriffen werden kann, können Sie Folgendes tun:/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
quelle
<block>
Tag in der Layoutdatei, aber ich habe viel aus Ihrer Antwort gelernt. Vielen Dank.