Magento Wyświetlanie odpowiedniej lokalizacji na podstawie lokalizacji

17

Chciałbym skonfigurować witrynę Magento, aby mogła rozpoznawać domyślny język i lokalizację użytkownika oraz wyświetlać witrynę w tym języku i z odpowiednią lokalizacją.

Na przykład:

Użytkownik z Rosji z domyślnym językiem rosyjskim przejdzie bezpośrednio do strony internetowej z językiem rosyjskim z Rublami jako domyślną walutą i cenami.

czy to możliwe? Jeśli tak to jak?

Karlson
źródło

Odpowiedzi:

14

Widoki GeoIP i sklepu pomogą ci rozwiązać ten problem.

GeoIP Możesz użyć dostawcy takiego jak MaxMind dla swojej bazy danych GeoIP (lub załadować go jako moduł serwera WWW, który dodaje kraj w nagłówku).

Na podstawie adresu IP możesz przekierować klienta do odpowiedniego widoku sklepu (sprawdź link wygenerowany przez przełącznik widoku sklepu.

Wyświetlenia sklepu

Rosyjski powinien być widokiem na sklep. Sprawdź przełącznik widoku sklepu, aby zobaczyć, jakiego linku potrzebujesz użyć dla swoich klientów.

Po przekierowaniu możesz ustawić plik cookie, aby powiązać klienta z widokiem sklepu.

FlorinelChis
źródło
Użyliśmy również GeoIP, aby przełączyć kilka bloków na stronie, aby zmienić takie rzeczy, jak nasza wiadomość o bezpłatnej wysyłce
Adam Justice
1
3 rzeczy, na które należy uważać w tym temacie: (1) Jeśli odwiedzający korzysta z serwera proxy w innym kraju lub adres IP jest niezgodny, może sam chcieć przejść na inną stronę internetową. Zrób to możliwe. (2) Rozróżnij lokalizację i tłumaczenie. Np. Użyj GeoIP do lokalizacji i nagłówków akceptacji języka dla tłumaczeń (rosyjska strona internetowa z językiem rosyjskim / angielskim, szwajcarska strona internetowa z językiem niemieckim / włoskim / francuskim). Zobacz odpowiedź poniżej . (3) Jeśli masz różne ceny (lub inną walutę bazową) dla Rosji, utwórz dla niej dedykowaną stronę internetową.
Matthias Zeis
9

Istnieje rozszerzenie Magento GeoIP (napisane przeze mnie), które pobiera najnowszy plik danych MaxMind i okresowo go aktualizuje.

Sugeruję dołączenie do controller_front_init_beforewydarzenia. Możesz użyć następującego kodu, aby sprawdzić kod ISO 3166-1 kraju odwiedzającego, a następnie przekierować go do widoku sklepu korespondencyjnego, jeśli taki posiadasz:

$geoIP = Mage::getSingleton('geoip/country');
$code = $geoIP->getCountry();

/*
 * Check if store view for this country/language exists and it is not a current store view. 
 * If so do a redirect.
 * You can also take a language from user agent into consideration.
 */

Szczegółowy artykuł na temat korzystania z tego rozszerzenia można znaleźć tutaj .

użytkownik487772
źródło
5

spójrz na http://www.thefutureoftheweb.com/blog/use-accept-language-header, jeśli możesz programować. Możesz dokonać zmiany w index.phpładowaniu widoku sklepu odpowiedniego dla języka.

Sander Mangel
źródło
Język tak, ale problemem jest nie tylko język, ale także położenie geograficzne.
Karlson
Możesz użyć Geo API Maxmind lub dowolnej innej bezpłatnej usługi geo, aby dokonać zmiany. Używam maxmind ze względu na ich wysoką dokładność ( maxmind.com/en/geolocation_landing )
Sander Mangel
Co chcesz zrobić, jeśli użytkownik jest obecnie w Rosji, ale jego językiem jest en-US? Lokalizacja jest często mniej informacyjna (i dokładna) niż Accept-Language.
kojiro
@kojiro najpierw wybrałbym język HTTP. masz rację, lokalizacja niewiele mówi o niektórych językach
Sander Mangel
1
Uważaj, samotny link jest uważany za kiepską odpowiedź, ponieważ sam w sobie nie ma znaczenia, a zasoby docelowe nie są gwarantowane w przyszłości . Lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
j0k
5

Kolejną rzeczą do obejrzenia jest GEO IP.

Kilka wierszy kodu poda kod kraju użytkownika, który możesz zmienić na tej podstawie.

Pamiętaj jednak, że będziesz mieć problemy z użyciem kodu opartego na przekierowaniu, jeśli korzystasz z tego samego sklepu z wersją Enterprise Edition i pełną pamięcią podręczną, gdy pierwsza strona zostanie zapisana w pamięci podręcznej .

Jamie Teuma
źródło
Dobra uwaga na temat buforowania. Musisz dowiedzieć się, jak to zrobić Vary: Accept-Languagew nagłówku zarówno przeglądarki, jak i FPC.
kojiro
Chcesz dodać kilka szczegółów na temat swojej ostatniej notatki dotyczącej FPC? Jestem co najmniej zaintrygowany.
nevvermind
Miałem problem z użyciem modułu, który używa GEO IP i przekierowuje użytkownika do odpowiedniego sklepu na podstawie kodu kraju. To się nie powiodło i po debugowaniu obserwator nigdy nie był wywoływany, gdy strona była buforowana przy użyciu FPC, w rzeczywistości był wywoływany tylko jeden obserwator, ponieważ FPC buforował pełny skrypt bez kodu magento.
Jamie Teuma,
Wiem, że inny programista budował skrypt w pliku index.php w celu obejścia tego problemu, ale nie jestem pewien, czy to się powiodło, czy nie, więc nie mogę JESZCZE komentować !!
Jamie Teuma,
4

Inną opcją jest użycie auto_prepend konfiguracji PHP . Spowoduje to, że wszystkie skrypty obsługiwane przez PHP uruchomią skrypt przed uruchomieniem faktycznie żądanego skryptu, ale po .htaccess (jeśli go używasz).

Podejście to w połączeniu z niektórymi innymi sugestiami (np. Użycie MaxMind do danych lokalizacji geograficznej i widoków sklepów dla określonych regionów) może dać dość czyste podejście.

Jeśli używasz wersji Magento> = 1.4, domyślny kod sklepu można skonfigurować, ustawiając wartość $ _SERVER ['MAGE_RUN_CODE'].

W pliku .htaccess lub konfiguracji apache dodaj:

php_value auto_prepend_file /var/www/mystore/path/to/script.php

W twojej script.phpwykonać wszelkie niezbędne logiki biznesowej i ustawić odpowiedni kod sklepu:

<?php
if (get_ip_location($_SERVER['REMOTE_ADDR']) == 'uk') {
    $_SERVER['MAGE_RUN_CODE'] = 'store_code_uk';
} else {
    $_SERVER['MAGE_RUN_CODE'] = 'store_code_us';
}

Należy zauważyć, że będzie to dotyczyć wszystkich żądanych plików PHP, więc musisz o tym pamiętać.

beeplogic
źródło