Magento neden ödeme sırasında mevcut müşteri adreslerini yeniden kaydediyor?


16

Ödeme işlemi sırasında, müşteri mevcut adres formunu seçmiş olsa bile, customer_addresskuruluş açılır menüsü yeniden kaydedilir. Ne için bir fikrin var mı?

Güncelleme:

Mage_Checkout_Model_Type_Onepage::saveOrderAşağıdaki kodun yürütüldüğü yerden başlar :

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

Bu submitAllçağrılar Mage_Sales_Model_Service_Quote::submitOrderaşağıdaki yürütür:

$transaction->save();

Bu yöntem, alıntıdaki (?) Tüm nesneler arasında dolaşır ve bunları kaydeder.

Güncelleme:

En iğrenç şey, müşterinin sahip olduğu tüm adresler için yapıyorlar. Ziyaretçiniz adres defterinde kayıtlı 10 adres alırsa, ödeme sırasında hepsi yeniden kaydedilir. Neden Magento'nun en fazla kaynak tüketen kısmı olduğunu merak etmeyin.


Gelen customer_address_entityveya teklifinde?
Matthias Kleine

Üzgünüm, ne demek istediğinden emin değilim. customer_addressVarlık sipariş sırasında kaydediliyor. Alıntı yapmak için bağlantı yok.
user487772

1
Bunu yapan kodu verebilir misiniz? Bu beni arama zahmetinden kurtarır
Marius

Soru güncellendi.
user487772

@Tim Sanırım cevap çünkü onlar kabul edilebilir bir cevap olacağını düşünmüyordu;) Benim tahminim adres var olup olmadığını kontrol etmek istemiyorlardı, bu yüzden her şeyi kaydetmek daha kolay / tembel olurdu. Yine de bir tahmin
David Manners

Yanıtlar:


6

Genellikle, bir modeldeki veriler değişmedikçe, bunun üzerine save () çağrılması modelin yeniden kaydedilmesine neden olmaz .
Bu, mantığın bu şekilde uygulanması sırasında bir varsayım olmalıdır.

Bununla birlikte, teklif adresi modelinin yöntemi _beforeSave(), teklif kimliği, müşteri kimliği ve muhtemelen müşteri adres kimliği ve same_as_billingmülk yoluyla yöntem ayarladığından, _populateBeforeSaveData()gereksiz tasarruflara karşı koruma engellenir.

Yöntemde kolay bir düzeltme, populateBeforeSaveData()mevcut modelde zaten aynı değere sahip olan adres modelinde ayarlanacak değerlerin kontrol edilmesi olacaktır.

Neyse ki, teklif adresleri düz bir tabloda saklanır, bu da tasarrufun oldukça verimli olduğu anlamına gelir. Bazı B2B mağazaları dışında, birkaç adresten daha fazlasına sahip müşteriler yaşamadım.


2

Bunun düşünülmediğini tahmin ediyorum.

Belki herhangi bir yeni adresi artı varsayılan faturalandırma ve gönderim adresindeki herhangi bir değişikliği güncellemek yerine, her şeyi kaydetmek daha kolay olacağı düşünülüyordu, çünkü insanlar birçok adrese sahip olmayacak ve ödeme zaten yavaş insanlar fark etmeyecek .... çok .

Not: Bu sadece bir fikir ama paylaşmaya değer olduğunu düşündüm, ayrıca kendimi aynı varsayımları yaptığımı hayal edebiliyorum :(


0

ödeme sırasında adres kaydetme _afterSave () tarafından yapılır - Müşteri kaynak modelindeki yöntem.

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

hatırlıyorum gibi müşteri modeli sipariş yerleştirme sırasında kaydedilir.

şerefe


Evet, bu açıktı. Soru "Ne için?".
user487772

@Tim: sanırım genel. Ödeme atm için gözle görülür bir neden yok.
sbothner_mzentrale

@Tim: Örneğin admin'de saveAction'ın bu davranışa ihtiyacı var.
sbothner_mzentrale

Ne için ihtiyacı var?
user487772
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.