2010-12-31 10 views
7

में बैकएंड बनाम फ्रंटेंड खरीद अलग-अलग करना क्या यह बताने का कोई तरीका है कि वेब साइट के अग्रभाग के माध्यम से कोई ऑर्डर दिया गया था या व्यवस्थापकीय पैनल के माध्यम से प्रवेश किया गया था?Magento

उत्तर

10

डिफ़ॉल्ट रूप से, Magento केवल संग्रहीत करता remote_ip ग्राहक द्वारा जगह है कि एक आदेश के लिए तालिका sales_flat_order में (जबकि व्यवस्थापक आदेश शून्य पर सेट है)।

तो इस कोशिश:

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

देखें Programmatically differentiate between admin & customer-placed orders

+0

मेरे द्वारा अच्छे हुक +1 के लिए धन्यवाद @RS –

+0

मैं कल्पना करने की कोशिश कर रहा हूं कि यदि क्लाउड होस्ट पर Magento इंस्टॉल किया गया था, तो ग्राहक या व्यवस्थापक द्वारा रखे गए आदेश में एक दूरस्थ आईपी पता होगा । मुझे सही साबित होना है – burntblark

8

हर आदेश में एक store_id है, जब यह या तो हो 0 ('व्यवस्थापक' स्टोर के लिए) administraction के माध्यम से दर्ज किया है या अशक्त।

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

getStore() कि के रूप में उपयोग हमेशा मज़बूती से व्यवस्थापक दुकान वस्तु नहीं लौटेगा न करें।

Magento के नवीनतम संस्करणों के साथ काम नहीं करता है। (टिप्पणी को देख)

+2

clockworkgeek के जवाब सही है। मैं एक और तरीका जोड़ूंगा, जो प्रशासनिक उपयोगकर्ताओं के लिए अधिक उपयोगी है जो प्रोग्रामर नहीं हैं। यदि आप प्रशासन स्क्रीन (एडमिन -> बिक्री -> ऑर्डर) में ऑर्डर देख रहे हैं तो ऑर्डर को "आईपी से रखा गया" फ़ील्ड होगा यदि आदेश फ्रंटेंड से बनाया गया था, लेकिन अगर यह व्यवस्थापक बैकएंड स्क्रीन के माध्यम से किया गया था वहां नहीं होगा। – shaune

+0

@sdek - यह एक अच्छी टिप है, मुझे इससे पहले पता नहीं था। – clockworkgeek

+9

Magento के नवीनतम संस्करणों के साथ काम नहीं करता है। व्यवस्थापक बैकएंड के भीतर आदेश बनाने से पहले आपको स्टोर आईडी चुनना होगा। तो store_id हमेशा एक मान अलग होगा 0. –

0

आप is_super_mode मूल्य जा सकते हैं (मैं केवल बोली पर जांच की है: $quote->getIsSuperMode())

+0

आपको यह क्षेत्र कहां मिला? मुझे Magento के लिए यह नहीं मिल रहा है 1.7 – Alex