2013-02-26 8 views
5

Il controllo di una pagina funzionava correttamente circa una settimana fa e ora non lo è. Non ho alcun dubbio, perché stavo ancora avendo un problema relativo al backend dell'amministratore, e probabilmente mi sono in qualche modo messo in dubbio in questo modo di lavorarci su.Magento one page checkout- get TypeError: checkout undefined (in opcheckout.js)

In ogni caso, ciò che accade è che quando un utente (registrato, registrato) fa clic sul pulsante "Continua" nel passaggio Informazioni di fatturazione del controllo di una pagina, è come se il pulsante non fosse stato cliccato. Non procede al passaggio successivo. E la console di errore (in Firefox) riporta "TypeError: checkout is undefined" e mostra la riga 303 in opcheckout.js.

Questo problema è molto simile a another one posted on SO ma (a) a quello non si risponde realmente e (b) non ho un punteggio abbastanza alto da commentare (o da aggiungere alla domanda lì).

Mentre una soluzione sarebbe meravigliosa, sto anche cercando davvero di imparare come eseguire il debug di questo. Ho già applicato molte soluzioni magento che ho trovato su Google (per altri problemi) e, sebbene funzionino e questa è la cosa principale, sto iniziando a voler essere in grado di risolvere i miei problemi. E forse anche essere in grado di aiutare gli altri alla fine ...

Quindi, in questo caso, dato che "checkout in undefined", come potrei trovare dove dovrebbe essere definito?

+0

Quando si passa al tema predefinito, questo problema è scomparso. –

+0

Ma questo non significa che il mio problema sia risolto, ma lo limita un po ': se il pacchetto base è usato, le cose funzionano. Ma ovviamente voglio che il mio pacchetto personalizzato funzioni (come al solito). –

+0

Prova a fare un diff su '/ skin/frontend/base/default/js/opcheckout.js' e nei file'/skin/frontend/[yourpackage]/[yourtheme]/js/opcheckout.js' (se quest'ultimo esiste). – pspahn

risposta

0

La soluzione era quella di

  1. Correggere due riferimenti alle classi cattivi in ​​onepage.phtml, e
  2. Rinominare alcune classi CSS per corrispondere a ciò che il codice cassa magazzino Magento vuole.

Le classi CSS specifiche necessarie sono state:

  • passo-titolo
  • passo
  • numero

Ecco un estratto del corretto onepage.html del file:

<ol id="checkoutSteps" class="one-page-checkout">`<?php $i=0; foreach($this->getSteps() as $_stepId => $_stepInfo): ?> 
<?php if (!$this->getChild($_stepId) || !$this->getChild($_stepId)->isShow()): continue; endif; $i++ ?> 
    <li id="opc-<?php echo $_stepId ?>" class="section <?php echo !empty($_stepInfo['allow'])?'allow':'' ?> <?php echo !empty($_stepInfo['complete'])?'saved':'' ?>"> 
     <div class="step-title"> 
      <h3><span class="step-count"><?php echo $i ?></span> &nbsp;<?php echo $_stepInfo['label'] ?></h3><a href="#"><?php echo $this->__('Edit') ?></a> 
     </div> 
     <div id="checkout-step-<?php echo $_stepId ?>" class="step <?php if($_stepId=='shipping_method'): ?>-no-padding<?php endif; ?> a-item" style="display:none;"> 
      <?php echo $this->getChildHtml($_stepId) ?> 
     </div> 
    </li> 
<?php endforeach ?> 
</ol> 

E qui è un esempio per copiare uno dei mie classi CSS esistente per uno dei nuovi quelli richiesti (dal file boxes.css):

.one-page-checkout .box { border:1px solid #bbb6a5; border-top:0; padding:15px 20px; background:#faf7ee; } 
.one-page-checkout .step { border:1px solid #bbb6a5; border-top:0; padding:15px 20px; background:#faf7ee; } 

avevo chiamato questa "scatola", ma deve essere "step" per quanto riguarda Magento. Dal momento che probabilmente le tue classi css sono state diverse, dovrai copiare

Spero che questo aiuti qualcuno.

A proposito, ecco come lo capito questo:

  1. Osservare problema con il mio tema
  2. di prova con magazzino tema: confermano che funziona
  3. tornare al mio tema, e disattivare i file selettivamente per capire quali fanno la differenza,
  4. Riducetelo in un file: onepage.phtml, esaminare con attenzione, per fare scorta di confrontare
  5. nomi delle classi CSS hanno scoperto che il mio tema non ha avuto
  6. aggiungerli, eseguire il debug

Questo è lungo e noioso, ma sembra funzionare.

2

Nel mio caso, il file /skin/frontend/base/default/js/opcheckout.js non corrisponde a quello in /skin/frontend/[yourpackage]/[yourtheme]/js/opcheckout.js come suggerito da pspahn. Il file .js nel mio tema era completamente vuoto. Copiando il contenuto su tutto risolto. Commentando qui per la visibilità per gli altri che potrebbero essere alla ricerca.