क्यों Magento चेकआउट के दौरान मौजूदा ग्राहक पते को फिर से सहेजता है?


16

चेकआउट प्रक्रिया के दौरान भी अगर ग्राहक मौजूदा पते का चयन करता है तो ड्रॉप-डाउन customer_addressइकाई को फिर से सहेजा जा रहा है। किसी भी विचार के लिए क्या?

अपडेट करें:

यह शुरू होता है Mage_Checkout_Model_Type_Onepage::saveOrderजहां निम्नलिखित कोड निष्पादित किया गया है:

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

यह submitAllकॉल Mage_Sales_Model_Service_Quote::submitOrderजो निम्नलिखित निष्पादित करता है:

$transaction->save();

यह विधि उद्धरण (?) के सभी ऑब्जेक्ट्स के माध्यम से लूप करती है और उन्हें बचाती है।

अपडेट करें:

सबसे घृणित बात यह है कि वे इसे ग्राहक के सभी पतों के लिए कर रहे हैं। इसलिए यदि आपके आगंतुक को पता पुस्तिका में 10 पते सहेजे गए हैं, तो उन सभी को चेकआउट के दौरान फिर से सहेजा जाएगा। आश्चर्य नहीं कि यह Magento के सबसे अधिक उपभोग करने वाला हिस्सा क्यों है।


में customer_address_entityया बोली?
मथायस क्लेन

क्षमा करें, निश्चित नहीं कि आपका क्या मतलब है। customer_addressइकाई ऑर्डर देने के दौरान सहेजा जा रहा है। बोली का कोई संबंध नहीं।
user487772

1
क्या आप ऐसा करने वाला कोड प्रदान कर सकते हैं? यह मुझे खोज करने की परेशानी से बचा लेगा
Marius

सवाल अपडेट किया।
user487772

@ मुझे लगता है कि उत्तर का कारण उन्हें नहीं लगता था कि यह एक स्वीकार्य उत्तर होगा;) मेरा अनुमान है कि वे जांच नहीं करना चाहते हैं कि क्या पता मौजूद है तो यह सब कुछ बचाने के लिए आसान / आसान होगा। हालांकि केवल एक अनुमान
डेविड मैनर्स

जवाबों:


6

जब तक कि किसी मॉडल पर डेटा नहीं बदला जाता है, तब तक उस पर कॉलिंग सेव () मॉडल को फिर से सहेजने का कारण नहीं होगा
इस तरह से तर्क को लागू करने के दौरान यह धारणा रही होगी।

हालांकि, चूंकि उद्धरण पता मॉडल की विधि _beforeSave()बोली आईडी, ग्राहक आईडी, और संभवतः ग्राहक पता आईडी और same_as_billingसंपत्ति को _populateBeforeSaveData()विधि के माध्यम से सेट करती है, अनावश्यक बचत के खिलाफ सुरक्षा को दरकिनार किया जाता है।

विधि में एक आसान निर्धारण populateBeforeSaveData()यह जांचने के लिए होगा कि क्या मान उसी मॉडल के वर्तमान मॉडल पर पहले से मौजूद मान के साथ सेट किए जा सकते हैं।

सौभाग्य से, उद्धरण पते एक सपाट तालिका में संग्रहीत किए जाते हैं, जिसका अर्थ है कि बचत काफी कुशल है। और कुछ बी 2 बी स्टोर्स को छोड़कर मैंने उन ग्राहकों को अनुभव नहीं किया है जिनमें कुछ पते हैं।


2

मुझे लगता है कि इस के माध्यम से सोचा नहीं था खतरा होगा।

शायद यह सोचा गया था कि किसी भी नए पते को अपडेट करने के बजाय, डिफ़ॉल्ट बिलिंग और शिपिंग पते में किसी भी बदलाव से यह सब कुछ बचाने के लिए आसान होगा, क्योंकि लोगों को पता नहीं है कि कई पते और चेकआउट पहले से ही धीमी गति से लोगों को नोटिस नहीं करेंगे .... बहुत कुछ ।

नोट: यह केवल एक विचार है, लेकिन मैंने इसे साझा करने के लायक समझा, यह भी कि मैं खुद को एक ही धारणा बनाने की कल्पना कर सकता हूं :(


0

चेकआउट के दौरान पता बचाने के लिए _afterSave () द्वारा किया जाता है - ग्राहक संसाधन मॉडल में विधि।

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

जैसा कि मुझे याद है कि ग्राहक मॉडल ऑर्डर प्लेसमेंट के दौरान सहेजे जाते हैं।

चियर्स


हाँ, यह स्पष्ट था। सवाल "क्या है?"।
user487772

@ समय: सामान्य मुझे लगता है। चेकआउट atm के लिए कोई अस्पष्ट कारण नहीं है।
sbothner_mzentrale

@ समय: उदाहरण के लिए एडमिन में saveAction को इस व्यवहार की आवश्यकता है।
sbothner_mzentrale

इसके लिए क्या चाहिए?
user487772
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.