Frage

Ich versuche, eine .phtml über einen Ajax -Anruf anzurufen, und ich folgte ich Dies Beispiel zum Stackoverflow, aber mir fehlt entweder einen Aspekt oder mache es einfach falsch. Wenn der Ajax läuft, wird ein 404 und ich habe versucht, ihn direkt durch den Browser anzusehen, und es konnte es nicht finden. Basierend darauf nehme ich an, dass ein Aspekt der Dateistruktur, die ich eingerichtet habe, falsch ist, aber ich kann nicht genau herausfinden, was genau.

Ich habe Controller unter lokal/checkoutajax/controller/ajaxcontroller.php

    <?php
    class Checkoutajax_AjaxController extends Mage_Core_Controller_Front_Action {

    public function indexAction() {
          $this->loadLayout();
          $this->renderLayout();
      }
   }

In lokal/checkoutajax/etc/config.xml habe ich die folgenden

    <?xml version="1.0"?>
    <config>
      <modules>
        <Checkoutajax>
          <version>0.1.0</version>
        </Checkoutajax>
     </modules>
    <frontend>
    <routers>
    <Checkoutajax>
      <use>standard</use>
      <args>
          <module>Checkoutajax</module>
          <frontName>Checkoutajax</frontName>
      </args>
   </Checkoutajax>
   </routers>
   <layout>
     <updates>
       <checkoutajax>
         <file>checkoutajax.xml</file>
       </checkoutajax>
     </updates>
   </layout>
 </frontend>
    </config>

Ich habe das in myTemplate/default/layout/checkoutajax.xml

  <?xml version="1.0"?>
  <layout>
  <checkoutajax_ajax_index>
    <block type="checkout/checkoutajax" name="root" output="toHtml" template="checkoutajax/index.phtml" />
 </checkoutajax_ajax_index>
 </layout>

Und schließlich habe ich in myTemplate/default/template/checkoutajax/index.phtml

   <?php
   echo 'this is a test'

Schließlich ist dies der Ajax -Anruf

   JQuery.ajax({
            url: "/checkoutajax/ajax/index",
            type: "POST",
            data: data,
            success: function(data) {
            $j('#results').html(data);
            document.getElementsByClassName('minicart-content')[0].style.display = 'block';
            }
        });

Alle Hilfe wird sehr geschätzt.

War es hilfreich?

Lösung

Einige Tipps zur Fehlerbehebung:

Haben Sie ein Modul in App/etc/Modulen registriert?

Wenn nicht, sollte es als solches sein:

<?xml version="1.0"?>
<config>
    <modules>
        <ThomasRyan_Checkoutajax>
             <active>true</active>
             <codePool>local</codePool>
        </ThomasRyan_Checkoutajax>
    </modules>
</config>

Dieses Modulbenennungsnamen sieht falsch aus - es wird erwartet, dass es mit einem Unterstrich getrennt wird, der den Namespace angibt - also nicht Folgendes:

<module>Checkoutajax</module>

Alle Module werden als als benannt Company_Module, usw. Checkoutajax_AjaxController ist dann kein gültiger Klassenname. Überprüfen Sie Ihr allgemeines PHP -Fehlerprotokoll (oder Apache -Protokolle) und Sie sollten etwas sehen, das sich auswirkte class not exists.

Ändern/aktualisieren Sie dies zu ThomasRyan_Checkoutajax oder ähnliches. Alle Instanzen von Checkoutajax müssen in der Modul XML -Definition aktualisiert werden.

Der Frontname hat auch Probleme, nämlich, es sollte Kleinbuchstaben sein:

<frontName>Checkoutajax</frontName>

Ich bin mir nicht sicher, ob Magento den Kleinbuchstaben auf dem RoutName zwingt.

Der aktualisierte Code dann:

<?xml version="1.0"?>
<config>
  <modules>
    <ThomasRyan_Checkoutajax>
      <version>0.1.0</version>
    </ThomasRyan_Checkoutajax>
  </modules>
  <frontend>
    <routers>
      <Checkoutajax>
        <use>standard</use>
        <args>
          <module>ThomasRyan_Checkoutajax</module>
          <frontName>checkoutajax</frontName>
        </args>
      </Checkoutajax>
    </routers>
    <layout>
     <updates>
       <checkoutajax>
         <file>checkoutajax.xml</file>
       </checkoutajax>
     </updates>
   </layout>
 </frontend>
</config>

Und der Controller:

<?php

class ThomasRyan_Checkoutajax_AjaxController extends Mage_Core_Controller_Front_Action {

    public function indexAction() {
        $this->loadLayout();
        $this->renderLayout();
    }
}

Bearbeiten:

Dies ist nur ein kurzes Update, um zu erklären, wie Routen/Controller/Aktionen in Magento funktionieren. Nehmen wir an, dies ist Ihre URL:

www.yourstore.com/checkoutajax/ajax/index

Dies repräsentiert drei verschiedene Einheiten:

  • checkoutajax ist der Routename, auch genannt frontName in der Moduldefinition xml
  • ajax Hier repräsentiert der Controller -Name. Diese Controller -Datei sollte ajaxcontroller.php genannt werden und sich in der befindet /controllers Verzeichnis Ihres Moduls.
  • index repräsentiert die indexAction Methode.

Also, um sich zu visualisieren:

www.yourstore.com/checkoutajax/ajax/index
---------route--------^
---------controller-------------^
---------action-----------------------^

Andere Tipps

Sie haben einen Tippfehler in Ihrem Dateinamen. Die Controller -Datei sollte als lokal/checkoutajax/controller/ajaxcontroller.php (ohne s) ausgezeichnet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top