Чому 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
Чи можете ви надати код, який це робить? Це врятувало б мені клопоти пошуку
Маріус

Оновлено питання.
user487772

@Tim, я думаю, відповідь тому, що вони не думали, що це буде прийнятною відповіддю;) Я здогадуюсь, що вони не хотіли перевіряти, чи існує адреса, тож було б легше / леніше зберегти все. Хоча лише здогадка
Девід Маннерс

Відповіді:


6

Зазвичай, якщо дані не змінилися на моделі, виклик save () на ній не призведе до повторного збереження моделі .
Це, мабуть, було припущенням при здійсненні логіки таким чином.

Однак, оскільки метод моделі адреси цитата _beforeSave()встановлює ідентифікатор цитати, ідентифікатор клієнта, а також, можливо, ідентифікатор адреси клієнта та same_as_billingвластивість за допомогою _populateBeforeSaveData()методу, захист від непотрібного збереження обходить.

Найпростішим виправленням методу populateBeforeSaveData()було б перевірити, чи значення, які мають бути встановлені в адресної моделі, вже наявної в поточній моделі з тим же значенням.

На щастя, адреси цитат зберігаються у плоскій таблиці, що означає, що економія є досить ефективною. І за винятком деяких магазинів B2B, я не мав досвід клієнтів, які мали б більше ніж пару адрес.


2

Я б ризикнув здогадатися, що це не було продумано.

Можливо, думалося, що замість того, щоб оновлювати будь-яку нову адресу плюс будь-яку зміну адреси виставлення рахунків за замовчуванням і адресу доставки, було б простіше просто зберегти все, оскільки люди не мають стільки адрес, а замовлення вже повільно, люди не помітять .... багато .

Примітка: це лише ідея, але я вважав, що варто поділитися, також я можу уявити собі, що роблю ті самі припущення :(


0

Збереження адреси під час оформлення замовлення здійснюється за допомогою _afterSave () - методу в моделі ресурсів клієнта.

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

наскільки я пам’ятаю, модель клієнта зберігається під час розміщення замовлення.

ура


Так, це було зрозуміло. Питання "Для чого?".
user487772

@Tim: загальне, я думаю. Немає очевидних причин для отримання банкоматів.
sbothner_mzentrale

@Tim: Наприклад, SaveAction в адміністраторі потребує такої поведінки.
sbothner_mzentrale

Для чого це потрібно?
user487772
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.