Perché Magento salva nuovamente gli indirizzi dei clienti esistenti durante il checkout?


16

Durante il processo di checkout anche se il cliente seleziona un indirizzo esistente dal menu a discesa, l' customer_addressentità viene nuovamente salvata. Qualche idea per cosa?

Aggiornare:

Inizia da Mage_Checkout_Model_Type_Onepage::saveOrderdove viene eseguito il seguente codice:

$service = Mage::getModel('sales/service_quote', $this->getQuote());
$service->submitAll();

Questo submitAllchiama Mage_Sales_Model_Service_Quote::submitOrderche esegue quanto segue:

$transaction->save();

Questo metodo scorre tutti gli oggetti del preventivo (?) E li salva.

Aggiornare:

La cosa più disgustosa è che lo stanno facendo per tutti gli indirizzi che il cliente ha. Quindi, se il tuo visitatore riceve 10 indirizzi salvati nella rubrica, tutti questi verranno nuovamente salvati durante il checkout. Non mi chiedo perché sia ​​la parte che consuma più risorse di Magento.


Nella customer_address_entityo nella citazione?
Matthias Kleine,

Scusa, non sono sicuro di cosa intendi. L' customer_addressentità viene salvata durante l'ordine. Nessuna connessione da citare.
user487772,

1
Potete fornire il codice che fa questo? Mi risparmierebbe il problema di cercare
Marius

Aggiornato la domanda.
user487772,

@Tim immagino che la risposta perché non hanno pensato che sarebbe stata una risposta accettabile;) La mia ipotesi è che non volessero controllare se l'indirizzo esiste, quindi sarebbe più facile / più pigro salvare tutto. Solo un'ipotesi però
David Manners,

Risposte:


6

Solitamente, a meno che i dati non siano stati modificati su un modello, la chiamata di save () su di esso non provocherà il nuovo salvataggio del modello .
Questo deve essere stato il presupposto durante l'implementazione della logica in questo modo.

Tuttavia, poiché il metodo del modello dell'indirizzo di preventivo _beforeSave()imposta l'ID del preventivo, l'ID del cliente, più eventualmente l'ID dell'indirizzo del cliente e la same_as_billingproprietà tramite il _populateBeforeSaveData()metodo, viene elusa la protezione da risparmi non necessari.

Una soluzione semplice nel metodo populateBeforeSaveData()sarebbe quella di verificare se i valori che stanno per essere impostati sul modello di indirizzo sono già presenti sul modello corrente con lo stesso valore.

Fortunatamente, gli indirizzi delle virgolette sono memorizzati in una tabella piatta, il che significa che il salvataggio è abbastanza efficiente. E ad eccezione di alcuni negozi B2B non ho riscontrato clienti con più di un paio di indirizzi.


2

Immagino che questo non sia stato pensato.

Forse si pensava che invece di aggiornare qualsiasi nuovo indirizzo oltre a qualsiasi cambiamento nell'indirizzo di fatturazione e spedizione predefinito sarebbe stato più semplice salvare tutto, dal momento che le persone non avranno così tanti indirizzi e il checkout è già lento che la gente non noterà ... molto .

Nota: questa è solo un'idea, ma ho pensato che valesse la pena condividerla, inoltre posso immaginare di fare le stesse ipotesi :(


0

il salvataggio dell'indirizzo durante il checkout viene eseguito da _afterSave () - Metodo nel modello di risorsa del cliente.

protected function _afterSave(Varien_Object $customer)
{
    $this->_saveAddresses($customer);
    return parent::_afterSave($customer);
}

come ricordo il modello del cliente viene salvato durante il posizionamento dell'ordine.

Saluti


Sì, era chiaro. La domanda è "A cosa serve?".
user487772,

@Tim: generale penso. Nessun motivo osservabile per la cassa.
sbothner_mzentrale,

@Tim: ad esempio saveAction in admin richiede questo comportamento.
sbothner_mzentrale,

A cosa serve?
user487772,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.