Domanda

Sto cercando di chiamare un .phtml tramite una chiamata AJAX e ho seguito questo esempio su StackOverflow ma sto mancante qualche aspetto o semplicemente facendo male. Quando l'ajax gestisce ottiene un 404 e ho provato a vederlo direttamente tramite il browser e non poteva trovarlo. Sulla base di questo presumo qualche aspetto della struttura dei file che ho creato è sbagliato, ma io non riesco a capire che cosa esattamente.

Ho controller che si trova in / CheckoutAjax / controllori locali / AjaxController.php

    <?php
    class Checkoutajax_AjaxController extends Mage_Core_Controller_Front_Action {

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

Nel locale / CheckoutAjax / etc / config.xml Ho il seguente

    <?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>

Ho questo 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>

e infine ho in mytemplate / default / template / checkoutajax / index.phtml

   <?php
   echo 'this is a test'

Infine, questa è la chiamata AJAX

   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';
            }
        });

Ogni aiuto è molto apprezzato.

È stato utile?

Soluzione

Alcuni suggerimenti per la risoluzione:

Avete un modulo registrato in app / etc / modules?

In caso contrario, dovrebbe essere come tale:

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

Questa denominazione del modulo sembra errato - ci si aspetta di essere separati da un trattino che indica spazio dei nomi - così, non in questo modo:

<module>Checkoutajax</module>

Tutti i moduli sono chiamato come Company_Module, ecc Checkoutajax_AjaxController non è poi un nome di classe valido. Controlla il tuo generale log degli errori di PHP (o log di Apache) e si dovrebbe vedere qualcosa per l'effetto di class not exists.

Cambia / aggiornare questo per ThomasRyan_Checkoutajax o simili. dovranno essere aggiornati nella definizione del modulo XML tutte le istanze di Checkoutajax.

Il frontName ha anche problemi, vale a dire, dovrebbe essere in minuscolo:

<frontName>Checkoutajax</frontName>

Non sono sicuro se Magento forza la minuscola sul routename.

Il codice aggiornato, quindi:

<?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>

E il controllore:

<?php

class ThomasRyan_Checkoutajax_AjaxController extends Mage_Core_Controller_Front_Action {

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

Modifica

Questa è solo un rapido aggiornamento per spiegare come percorsi / controllori / azioni lavorano in Magento. diciamo di lasciare che questo è il vostro URL:

www.yourstore.com/checkoutajax/ajax/index

Questo rappresenta tre diverse entità:

  • checkoutajax è il nome del percorso, chiamato anche frontName nella definizione del modulo XML
  • ajax qui rappresenta il nome del controller. Questo file di controllo deve essere denominato AjaxController.php e si trova nella directory /controllers del modulo.
  • index rappresenta il metodo indexAction.

Quindi, di visualizzare:

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

Altri suggerimenti

Hai un errore di battitura nel nome del file. file di controller dovrebbe essere nominato / CheckoutAjax / controllori locali / AjaxController.php (senza s)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top