Vernik'in arkasındaki GeoIp tabanlı varsayılan para birimi seçimi


14

Bir mağazanın ilk ziyaretlerinde GeoIP kullanarak müşterinin IP'sine dayalı olarak varsayılan bir para birimini akıllıca seçmesini istiyorum (önceden seçilmiş para birimi çerezi olmadan). Mağaza, Nexcess'in mükemmel Turpentine uzantısını kullanarak Varnish'in arkasında.

Uzantı, standart Magento para birimi çerezi belirli bir istek üzerine ayarlandığı sürece para birimini iyi işler.

Bu aşamadaki düşüncelerim:

  1. GeoIP aramasını (C cinsinden) yapmak için Varnish yapılandırmasına VCL ekleyin ve önceden ayarlanmamışsa, çerezi gelen istek üzerine ayarlayın.
  2. Aramayı yapan ve çerezi ayarlayan kullanıcı başına önbelleğe alınmış bir blok ekleyin (ancak bu ilk sayfa yüklemesinde geçerli olmaz)

Belirgin bir tekniği eksik - belki bazı istemci tarafı JS verniği önbelleğe alınmamış bir URL yolu belirleme yapar?

Bunu yapmanın en iyi yolunu bilen var mı ?

Yanıtlar:


4

Üretimde bunun gibi bir şey var (müşterinin konumuna bağlı olarak sepete ve fiyatlandırmaya eklemeyi etkinleştiriyoruz veya devre dışı bırakıyoruz).

Https://github.com/leed25d/geoip-vmod adresinden "Varnish GeoIP modülünü" oluşturduk ve kurduk ... Bu, kullanıcının ülkesini gösteren Magento'ya ulaşan her istekte bir "X-GeoIP" başlığı belirler. Magento'da bu başlığı tespit etmeniz ve içeriği gerektiği gibi özelleştirmeniz gerekir.

Üstesinden gelinmesi gereken son sorun, Verniğin üretilen sayfayı önbelleğe alması ve ülkesine bakılmaksızın tüm müşterilere sunmasıdır. Bu sayfa için önbelleğe almayı "kapatabilirsiniz", ancak performans düşüyor, bu da ideal değil. Çözümümüz, HTTP yanıtımızda Varnish'e X-GeoIP üstbilgisinin farklı değerleri için farklı nesneleri önbelleğe almasını söyleyen bir "Vary" başlığı göndermekti, bu nedenle her ziyaretçinin ülkesi için farklı bir sayfa önbelleğe alındı.

Aligent'teki meslektaşlarımdan biri, ülke kodunu X-GeoIP başlığından almak için bir yardımcı içeren bir Magento modülü oluşturdu (mevcut değilse IP'ye geri dönüş ile birlikte, geliştirme için yararlıdır) ve " Değişir "başlığı. Modülü açtık , uygulama ayrıntılarını istiyorsanız https://github.com/aligent/Aligent_GeoIP adresine bakın .


1

X-Forwarded-For sunucu değişkenini deneyip ayarlayabilir ve bunu geoip ile kullanabilirsiniz

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

Ancak bu yalnızca arka ucun, bir ürün sayfası söylemek için ilk istek için para birimini doğru bir şekilde ayarlamasına yardımcı olur. Herhangi bir kullanıcı tarafından bu ürün sayfasının ikinci ve sonraki görünümleri Vernik tarafından önbelleğe alınır ve böylece arka uçtaki para birimi kodu düzgün çalışmaz mı? Ben çerez arka ayar vurmak önce varsayılan ayar olması gerektiğini düşünüyorum?
Ashley Schroder

AJAX veya ESI, magento-vernik uzantınız destekliyorsa içerir.
Dmytro Zavalkin

1

Bunu daha önce yapmadım, ama aklımdan geçen şey bu:

Ülke kodunu belirlemek için libvmod-geoip kullanın (bu vernik uzantısını kullanmadı, dikkatli olun ;-)) https://github.com/lampeh/libvmod-geoip

Ardından sub vcl_hash(), ülke kodunu önbellek tuşlarına eklemek için karma işlevini genişletirsiniz . Bu, her şeyi ülke koduna göre önbelleğe almanızı sağlar.

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

Ayrıca ülke kodunu başlık olarak eklersiniz, set req.http.X-GeoIP = geoip.client_country_code();böylece magento sunucusu doğru ülkeyi belirleyebilir ve doğru şeyleri gönderebilir.

Bu sadece bir fikir, onu geliştirmeniz gerekebilir, ancak umarım iyi bir çözüm bulmanıza yardımcı olur :)

Ayrıca müşterilerin çerezlerine erişebilir ve bir ülke kodu / para birimi olup olmadığını kontrol edebilir ve ayarlandıysa farklı bir yol izleyebilir ve geoip işlevini çağırma ...


0

Kullanıcı başına önbellekleme önerdiniz, bu delilik. Önbellek isabet oranlarınız neredeyse Vernik kullanmanın herhangi bir faydasını geçersiz kılacaktır. Bahsetmiyorum bile Vernik, kullanıcı başına önbellek girişleri için yer açmak üzere kullanıcı başına eski önbellek girişlerini atamak için LRU mekanizması aracılığıyla son derece sıkı çalışacaktır.

Birkaç seçeneğiniz var,

  1. Vernik tutun, vernik geoip modülünü kullanın, kullanıcı önbellekleme başına kullanın,% 0 isabet oranlarına sahip olun ve vernik örneğinde tüm sunucu kaynaklarınızı boşa harcayın.
  2. Vernik tutun, vernik geoip modülünü kullanın, para ile ilgili herhangi bir blok için bir ESI kullanın. Esi'yi önbelleğe almanız gerekecek, aksi takdirde, isabet oranları sıfır olacaktır.
  3. Vernik tutun, vernik geoip modülünü kullanın ve sadece URL yapınızı değiştirin. Her para birimi için farklı bir URL'niz varsa (ör. / Usd, / can), isabet oranlarını azaltmış olursunuz ve neredeyse kusursuz çalışır.
  4. Hendek Vernik, o zaman her şey amaçlandığı gibi çalışacaktır.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.