Tại sao Magento lưu lại địa chỉ khách hàng hiện tại trong quá trình thanh toán?


16

Trong quá trình thanh toán ngay cả khi khách hàng chọn mẫu địa chỉ hiện có, customer_addressthực thể thả xuống đang được lưu lại. Bất cứ ý tưởng để làm gì?

Cập nhật:

Nó bắt đầu tại Mage_Checkout_Model_Type_Onepage::saveOrdernơi đoạn mã sau được thực thi:

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

Cuộc submitAllgọi Mage_Sales_Model_Service_Quote::submitOrdernày thực hiện như sau:

$transaction->save();

Phương pháp này lặp qua tất cả các đối tượng của trích dẫn (?) Và lưu chúng.

Cập nhật:

Điều kinh tởm nhất là họ đang làm điều đó cho tất cả các địa chỉ khách hàng có. Vì vậy, nếu khách truy cập của bạn nhận được 10 địa chỉ được lưu trong sổ địa chỉ, tất cả chúng sẽ được lưu lại trong quá trình thanh toán. Đừng thắc mắc tại sao nó là phần tiêu tốn nhiều tài nguyên nhất của Magento.


Trong customer_address_entityhoặc trong trích dẫn?
Matthias Kleine

Xin lỗi, không chắc ý của bạn là gì. Các customer_addressthực thể đang được lưu trong khi đặt hàng. Không có kết nối để báo giá.
dùng487772

1
Bạn có thể cung cấp mã làm điều này? Nó sẽ cứu tôi khỏi những rắc rối khi tìm kiếm
Marius

Cập nhật câu hỏi.
dùng487772

@Tim Tôi đoán câu trả lời khiến họ không nghĩ rằng đó là câu trả lời chấp nhận được;) Tôi đoán là họ không muốn kiểm tra xem địa chỉ có tồn tại hay không nên tiết kiệm mọi thứ sẽ dễ dàng hơn. Chỉ một dự đoán mặc dù
David Manners

Câu trả lời:


6

Thông thường, trừ khi dữ liệu đã thay đổi trên một mô hình, việc gọi save () trên nó sẽ không khiến mô hình được lưu lại .
Đây phải là giả định trong khi thực hiện logic theo cách này.

Tuy nhiên, do phương thức của mô hình địa chỉ trích dẫn _beforeSave()đặt ID trích dẫn, ID khách hàng, cộng với có thể là ID địa chỉ khách hàng và same_as_billingtài sản thông qua _populateBeforeSaveData()phương thức, việc bảo vệ chống lại việc tiết kiệm không cần thiết bị phá vỡ.

Một sửa chữa dễ dàng trong phương thức populateBeforeSaveData()sẽ là kiểm tra xem các giá trị sắp được đặt trên mô hình địa chỉ đã có trên mô hình hiện tại có cùng giá trị hay chưa.

May mắn thay, địa chỉ báo giá được lưu trữ trong một bảng phẳng, có nghĩa là tiết kiệm khá hiệu quả. Và ngoại trừ một số cửa hàng B2B tôi chưa có khách hàng có kinh nghiệm có nhiều hơn một vài địa chỉ.


2

Tôi sẽ mạo hiểm đoán rằng điều này không được nghĩ đến.

Có thể người ta nghĩ rằng thay vì cập nhật bất kỳ địa chỉ mới nào cộng với bất kỳ thay đổi nào về địa chỉ thanh toán và giao hàng mặc định, việc lưu mọi thứ sẽ dễ dàng hơn, vì mọi người sẽ không có nhiều địa chỉ và việc thanh toán đã chậm mà mọi người không nhận thấy .... nhiều .

Lưu ý: đây chỉ là một ý tưởng nhưng tôi nghĩ nó đáng để chia sẻ, tôi cũng có thể tưởng tượng mình đang đưa ra những giả định tương tự :(


0

lưu địa chỉ trong khi thanh toán được thực hiện bởi _afterSave () - Phương thức trong mô hình tài nguyên khách hàng.

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

như tôi nhớ mô hình khách hàng được lưu trong quá trình đặt hàng.

chúc mừng


Vâng, điều đó đã rõ ràng. Câu hỏi là "Để làm gì?".
dùng487772

@Tim: tôi nghĩ chung. Không có lý do quan sát để kiểm tra atm.
sbothner_mzentrale

@Tim: Ví dụ saveAction trong quản trị viên cần hành vi này.
sbothner_mzentrale

Nó cần gì?
dùng487772
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.