Chcę, aby sklep inteligentnie wybrał domyślną walutę na podstawie adresu IP klienta przy użyciu GeoIP podczas pierwszej wizyty (bez wcześniej wybranego pliku cookie waluty). Sklep znajduje się za Lakierem przy użyciu doskonałej terpentyny Nexcess.
Rozszerzenie obsługuje walutę, o ile standardowe ciasteczko walutowe Magento jest ustawione na dane żądanie.
Moje myśli na tym etapie to:
- Dodaj VCL do konfiguracji Varnish, aby wykonać wyszukiwanie GeoIP (w C) i ustaw ciasteczko na żądanie przychodzące, jeśli oczywiście nie jest jeszcze ustawione.
- Dodaj buforowany blok dla poszczególnych użytkowników, który dokonuje wyszukiwania i ustawia plik cookie (jednak nie będzie to miało zastosowania przy ładowaniu pierwszej strony)
Czy brakuje mi oczywistej techniki - może jakiś JS po stronie klienta do ścieżki URL niebuforowanej w pamięci podręcznej, która determinuje?
Czy ktoś zna najlepszy sposób to zrobić?
Nie robiłem tego wcześniej, ale to, co przychodzi mi na myśl:
Użyj libvmod-geoip, aby określić kod kraju (nie używaj tego rozszerzenia lakieru, bądź ostrożny ;-)) https://github.com/lampeh/libvmod-geoip
Następnie rozszerzasz funkcję skrótu,
sub vcl_hash()
aby dodać kod kraju do kluczy pamięci podręcznej. To pozwala buforować wszystko na podstawie kodu kraju.Dodajesz również kod kraju jako nagłówek, tak
set req.http.X-GeoIP = geoip.client_country_code();
aby serwer magento mógł określić właściwy kraj i dostarczyć poprawne rzeczy.To tylko pomysł, być może trzeba go poprawić, ale mam nadzieję, że pomoże ci znaleźć dobre rozwiązanie :)
Możesz również uzyskać dostęp do plików cookie klientów i sprawdzić kod kraju / walutę, a jeśli jest ustawiony, pójdź inną drogą i nie wywoływaj funkcji geoip ...
źródło
Zasugerowałeś buforowanie na użytkownika, co jest szaleństwem. Twój wskaźnik trafień w pamięci podręcznej prawie nie spowoduje utraty korzyści z używania Lakieru. Nie wspominając już, że Varnish będzie pracował bardzo ciężko dzięki swojemu mechanizmowi LRU, aby pozbyć się starych wpisów pamięci podręcznej użytkownika, aby zrobić miejsce na nowe wpisy pamięci podręcznej użytkownika.
Masz kilka opcji,
źródło