Jest to dość prosta modyfikacja, a bardzo wygodna dla klienta. Wraz ze zmianą języka na sklepie – zostanie automatycznie przestawiona waluta. Jak to zrobić?
Zawartość artykułu
Sparowanie języków i walut
Na początek sprawdź ID języków i walut. W dziale „Międzynarodowy -> Lokalizacja”
Porównaj obie strony:
W naszym przypadku:
- dla języka o ID = 1 ustaw walutę o ID = 2
- dla języka o ID = 2 ustaw walutę o ID = 1
- dla języka o ID = 3 ustaw walutę o ID = 3
U Ciebie te pary mogą być inne.
Edycja pliku PHP
Otworz plik:
classes/Tools.php
Znajdź funkcję:
public static function switchLanguage(Context $context = null)
Zmiana dla wersji 1.7 / PrestaShop 8
Zmień kod:
if ( ($iso = Tools::getValue('isolang')) && Validate::isLanguageIsoCode($iso) && ($id_lang = (int) Language::getIdByIso($iso)) ) { $_GET['id_lang'] = $id_lang; }
na:
if ( ($iso = Tools::getValue('isolang')) && Validate::isLanguageIsoCode($iso) && ($id_lang = (int) Language::getIdByIso($iso)) ) { $_GET['id_lang'] = $id_lang; } global $cookie;
Czyli dopisujemy linijkę „global $cookie;”
Następnie pod kodem:
if (Validate::isLoadedObject($language) && $language->active && $language->isAssociatedToShop()) { $context->language = $language; } }
Wklej
switch($newLanguageId) { case 1: //if lang_id that's changed to is = 1 than... $cookie->id_currency = 2; @self::setCurrency($cookie); break; case 2: //and so on .... $cookie->id_currency = 1; @self::setCurrency($cookie); break; case 3: $cookie->id_currency = 3; @self::setCurrency($cookie); break; }
W zależności od Twoich par – dla ID = 1 widocznego przy „case ID-języka” zastosuj odp. ID przy „$cookie->id_currency = ID-waluty”
Zmiana dla wersji 1.6
Po kodzie:
if (($iso = Tools::getValue('isolang')) && Validate::isLanguageIsoCode($iso) && ($id_lang = (int)Language::getIdByIso($iso))) { $_GET['id_lang'] = $id_lang; }
Wklej:
global $cookie;
Po kodzie:
$context->language = $language;
Wklej:
switch($id_lang) { case 1: //if lang_id that's changed to is = 1 than... $cookie->id_currency = 2; @self::setCurrency(); break; case 1: //and so on .... $cookie->id_currency = 2; @self::setCurrency(); break; case 3: $cookie->id_currency = 3; @self::setCurrency(); break; }
Gotowe 🙂
grafika: alphacoders.com
A co zrobić w PS 8.0….
@Darek użyj tego samego rozwiązania co dla PrestaShop 1.7. Sprawdziłem i działa 🙂
czy edytowanie w pliku PHP sklepu, przy updatecie sklepu do wyższego nie spowoduje, nadpisanie tegoż pliku, co spowoduje rozwalenie tej funkcji?
Służna uwaga. Może tak być. Pod warunkiem, ze ten plik zmieni się przy update’cie. Nie próbowałem też go „przeciążać” w overrides. Trzeba by spróbować.. 😉