वार्निश के पीछे जियोआईपीपी-आधारित डिफ़ॉल्ट मुद्रा चयन


14

मैं समझदारी से स्टोर करना चाहता हूं कि ग्राहक के आईपी के आधार पर एक डिफ़ॉल्ट मुद्रा का चयन करें जब वे पहली बार यात्रा करते हैं (बिना किसी प्रचलित मुद्रा कुकी के साथ)। नेक्सस के उत्कृष्ट तारपीन विस्तार का उपयोग करके वार्निश के पीछे स्टोर है।

एक्सटेंशन तब तक मुद्रा को ठीक से संभालता है जब तक कि मानक Magento मुद्रा कुकी किसी दिए गए अनुरोध पर सेट नहीं होती है।

इस स्तर पर मेरे विचार हैं:

  1. जिपआईपी लुकअप (C में) करने के लिए VCL को वार्निश कॉन्फिगरेशन में जोड़ें और इनबाउंड रिक्वेस्ट पर कुकी को सेट करें, अगर यह पहले से सेट नहीं है, तो निश्चित रूप से।
  2. प्रति उपयोगकर्ता कैश्ड ब्लॉक जोड़ें जो लुकअप करता है और कुकी सेट करता है (हालांकि यह तब पहले पेज लोड पर लागू नहीं होगा)

क्या मुझे एक स्पष्ट तकनीक याद आ रही है - शायद कुछ क्लाइंट-साइड जेएस को एक गैर-वार्निश-कैश्ड URL पथ जो निर्धारण करता है?

क्या किसी को यह करने का सबसे अच्छा तरीका पता है ?

जवाबों:


4

हमें उत्पादन में ऐसा कुछ मिला है (हम ग्राहक के स्थान के आधार पर कार्ट और मूल्य निर्धारण में सक्षम या अक्षम कर रहे हैं)।

हमने https://github.com/leed25d/geoip-vmod से "वार्निश जियोआईपी मॉड्यूल" बनाया और स्थापित किया ... यह प्रत्येक अनुरोध में एक "X-GeoIP" हेडर सेट करता है जो उपयोगकर्ता के देश को इंगित करने वाले Magento तक पहुंचता है। Magento के भीतर आपको इस शीर्ष लेख का पता लगाने और आवश्यकतानुसार सामग्री को अनुकूलित करने की आवश्यकता है।

दूर करने के लिए अंतिम समस्या यह है कि वार्निश उत्पन्न पृष्ठ को कैश करेगा और अपने देश की परवाह किए बिना सभी ग्राहकों को इसकी सेवा देगा। आप उस पृष्ठ के लिए कैशिंग "बंद" कर सकते थे, लेकिन प्रदर्शन ग्रस्त है, इसलिए यह आदर्श भी नहीं है। हमारा समाधान हमारी HTTP प्रतिक्रिया में एक "वैरी" हेडर भेजने का था, जो वार्निश को एक्स-जियोआईपी हेडर के विभिन्न मूल्यों के लिए अलग-अलग वस्तुओं को कैश करने के लिए कहता है, इसलिए हमारे पास प्रत्येक आगंतुक के देश के लिए कैश किया गया एक अलग पेज है।

Aligent में मेरे एक सहकर्मी ने एक Magento मॉड्यूल बनाया है जिसमें X-GeoIP हैडर से देश कोड लाने के लिए एक सहायक होता है (यदि यह मौजूद नहीं है तो IP के लिए बैकबैक के साथ, जो विकास के लिए उपयोगी है), और एक पर्यवेक्षक को "भेजने के लिए" वैरी “हैडर। हमने मॉड्यूल को ओपन कर दिया है, यदि आप कार्यान्वयन विवरण चाहते हैं तो https://github.com/aligent/Aligent_GeoIP देखें


1

आप एक्स-फ़ॉर्वर्ड-फॉर सर्वर वेरिएबल को ट्राई और सेट कर सकते हैं और जियोइप के साथ इसका उपयोग कर सकते हैं

 remove req.http.X-Forwarded-For;
 set req.http.X-Forwarded-For = client.ip;

लेकिन इससे केवल बैकएंड को उत्पाद पृष्ठ कहने के लिए पहले अनुरोध के लिए मुद्रा को सही ढंग से सेट करने में मदद मिलेगी। किसी भी उपयोगकर्ता द्वारा उस उत्पाद पृष्ठ का दूसरा और बाद का दृश्य, वार्निश द्वारा कैश किया जाएगा और इसलिए बैकएंड में मुद्रा कोड सही चलेगा? मुझे लगता है कि बैकएंड को हिट करने से पहले कुकी की डिफ़ॉल्ट सेटिंग की आवश्यकता होती है?
एश्ले श्रोडर

AJAX या ESI में शामिल हैं यदि आपका Magento-वार्निश एक्सटेंशन इसका समर्थन करता है।
Dmytro Zavalkin

1

मैंने पहले ऐसा नहीं किया है, लेकिन यह क्या है जो मेरे दिमाग को पार करता है:

देश कोड निर्धारित करने के लिए libvmod-geoip का उपयोग करें (इस वार्निश एक्सटेंशन का उपयोग नहीं किया है, सावधान रहें ;-)) https://github.com/lampeh/libvmod-geoip

फिर आप sub vcl_hash()कैश-कीज़ के लिए देश कोड को जोड़ने के लिए हैश फ़ंक्शन का विस्तार करते हैं । यह आपको देश-कोड के आधार पर सब कुछ कैश करने की अनुमति देता है।

sub vcl_hash {
    #...
    set req.hash += geoip.client_country_code();
    #...
}

आप एक हेडर के रूप में देश कोड भी जोड़ते हैं, जैसे set req.http.X-GeoIP = geoip.client_country_code();कि magento सर्वर सही देश को निर्धारित करने और सही सामान देने में सक्षम है।

यह सिर्फ एक विचार है, आपको इसे सुधारने की आवश्यकता हो सकती है, लेकिन उम्मीद है कि आपको एक अच्छा समाधान खोजने में मदद मिलेगी :)

आप ग्राहकों को कुकीज़ भी एक्सेस कर सकते हैं और देश-कोड / मुद्रा की जांच कर सकते हैं और यदि सेट किया गया है, तो अलग तरीके से जाएं और जियोफोन फ़ंक्शन को कॉल न करें ...


0

आपने प्रति उपयोगकर्ता कैशिंग का सुझाव दिया, जो पागलपन है। आपकी कैश हिट दरों में पहली जगह में वार्निश का उपयोग करने के किसी भी लाभ को शून्य कर दिया जाएगा। उल्लेख नहीं है कि वार्निश अपने LRU तंत्र के माध्यम से पुरानी प्रति उपयोगकर्ता कैश प्रविष्टियों का निपटान करने के लिए बेहद मेहनत कर रहा होगा ताकि नए प्रति उपयोगकर्ता कैश प्रविष्टियों के लिए जगह बनाई जा सके।

आपके पास कुछ विकल्प हैं,

  1. वार्निश रखें, वार्निश जियोइप मॉड्यूल का उपयोग करें, प्रति उपयोगकर्ता कैशिंग का उपयोग करें, 0% हिट दरें हैं और वार्निश उदाहरण पर अपने सभी सर्वर संसाधनों को बर्बाद करें।
  2. वार्निश रखें, वार्निश जियोइप मॉड्यूल का उपयोग करें, किसी भी मुद्रा से संबंधित ब्लॉक के लिए ईएसआई का उपयोग करें। आपको एसआई को कैश करना होगा, अन्यथा, फिर से, हिट दरें शून्य हो जाएंगी।
  3. वार्निश रखें, वार्निश जियोइप मॉड्यूल का उपयोग करें, और बस अपना URL संरचना बदलें। यदि आपके पास प्रत्येक मुद्रा (उदाहरण के लिए / usd, / can) के लिए एक अलग यूआरएल है, तो आपके पास हिट की दरें कम हो जाएंगी, और यह लगभग त्रुटिपूर्ण काम करेगा।
  4. डायन वार्निश, फिर सब कुछ इरादा के अनुसार काम करेगा।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.