2010-12-31 22 views

Trả lời

10

Theo mặc định, Magento chỉ lưu trữ các remote_ip trong bảng sales_flat_order cho một trật tự đó là nơi của khách hàng (trong khi thứ tự quản trị được đặt thành null).

Vì vậy, cố gắng này:

if(!empty($order->getRemoteIp()){ 
    //place online 
} 
else{ 
    // place by admin 
} 

Xem câu trả lời Programmatically differentiate between admin & customer-placed orders

+0

Cảm ơn vì móc đẹp +1 từ tôi @RS –

+0

Tôi đang cố gắng tưởng tượng rằng nếu Magento được cài đặt trên một máy chủ lưu trữ đám mây, thứ tự hoặc được đặt bởi khách hàng hoặc quản trị sẽ có một địa chỉ IP từ xa . Tôi đã sửa chữa – burntblark

8

Mọi đơn đặt hàng có store_id, khi được nhập thông qua quản trị, nó sẽ là 0 (cho 'cửa hàng' quản trị) hoặc không có giá trị.

if ($order->getStoreId()) { 
    // was placed via frontend 
} 

Không sử dụng getStore() vì điều đó sẽ không luôn trả về đối tượng cửa hàng quản trị một cách đáng tin cậy.

Không hoạt động với phiên bản Magento mới nhất. (Xem bình luận)

+2

clockworkgeek là đúng. Tôi sẽ thêm một cách khác, đó là chủ yếu là hữu ích cho người dùng hành chính mà không phải là lập trình viên. Nếu bạn đang xem xét thứ tự trong màn hình quản trị (Admin -> sales -> Orders) nó sẽ có trường "Đặt từ IP" nếu thứ tự được tạo từ giao diện người dùng, nhưng nếu nó được thực hiện thông qua màn hình phụ trợ quản trị nó sẽ không ở đó. – shaune

+0

@sdek - Đó là một mẹo hay, trước đây tôi không biết. – clockworkgeek

+9

Không hoạt động với phiên bản Magento mới nhất. Bạn phải chọn id lưu trữ trước khi tạo thứ tự trong phần phụ trợ quản trị. Vì vậy, store_id sẽ luôn có giá trị khác với 0. –

0

Bạn có thể kiểm tra giá trị is_super_mode (Tôi đã chỉ kiểm tra trên quote: $quote->getIsSuperMode())

+0

Bạn đã tìm thấy trường này ở đâu? Tôi không thể tìm thấy nó cho Magento 1.7 – Alex

Các vấn đề liên quan