Jump to content
  • 0

Zmiana języka powoduje zmianę waluty


stomasz

Question

Cześć,

szukałem rozwiązania w Internecie, ale niestety te, które udało mi się znaleźć są napisane dla starych wersji Presty :( W Was nadzieja. 

Czy ktoś z Was może mi podpowiedzieć w jaki sposób mogę spowodować, że zmiana języka spowoduje automatyczną zmianę waluty? Mam dwa języki - polski i angielski oraz dwie waluty: PLN i Euro. Chciałbym żeby sklep po wybraniu języka polskiego pokazywał ceny w PLN, a po zmianie języka na ENG pokazywał w EUR. 

Pomożecie? :(

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0
8 hours ago, stomasz said:

Cześć,

szukałem rozwiązania w Internecie, ale niestety te, które udało mi się znaleźć są napisane dla starych wersji Presty :( W Was nadzieja. 

Czy ktoś z Was może mi podpowiedzieć w jaki sposób mogę spowodować, że zmiana języka spowoduje automatyczną zmianę waluty? Mam dwa języki - polski i angielski oraz dwie waluty: PLN i Euro. Chciałbym żeby sklep po wybraniu języka polskiego pokazywał ceny w PLN, a po zmianie języka na ENG pokazywał w EUR. 

Pomożecie? :(

Witaj,

kiedyś próbowałem takiego rozwiązania ale nie do końca wszystko działało. Możesz sprawdzić czy u Ciebie się sprawdzi. W /classes/Tools.php jest metoda `switchLanguage()`, możesz w niej dodać np. coś takiego:

if( $newLanguageId == 6 ) {
	Tools::setCurrencyManually( 2 );
}

jak poniżej:

public static function switchLanguage(Context $context = null)
    {
        if (null === $context) {
            $context = Context::getContext();
        }

        // On PrestaShop installations Dispatcher::__construct() gets called (and so Tools::switchLanguage())
        // Stop in this case by checking the cookie
        if (!isset($context->cookie)) {
            return;
        }

        if (
            ($iso = Tools::getValue('isolang')) &&
            Validate::isLanguageIsoCode($iso) &&
            ($id_lang = (int) Language::getIdByIso($iso))
        ) {
            $_GET['id_lang'] = $id_lang;
        }

        // Only switch if new ID is different from old ID
        $newLanguageId = (int) Tools::getValue('id_lang');

        if (
            Validate::isUnsignedId($newLanguageId) &&
            $newLanguageId !== 0 &&
            $context->cookie->id_lang !== $newLanguageId
        ) {
            $context->cookie->id_lang = $newLanguageId;
            $language = new Language($newLanguageId);
            if (Validate::isLoadedObject($language) && $language->active) {
                $context->language = $language;
            }
            // SET EUR for German lang automatically.
            if( $newLanguageId == 6 ) {
               Tools::setCurrencyManually( 2 );
            }
            // ------------------------------------------
        }

        Tools::setCookieLanguage($context->cookie);
    }

Daj znać czy działa.

  • Like 1
Link to comment
Share on other sites

  • 0

Ah... no tak, zapomniałem że musisz poniżej dodać jeszcze metodę:

    public static function setCurrencyManually( $id_currency )
    {
        $cookie = Context::getContext()->cookie;

        $currency = Currency::getCurrencyInstance((int) $id_currency);
        if (is_object($currency) && $currency->id && !$currency->deleted && $currency->isAssociatedToShop()) {
            $cookie->id_currency = (int) $currency->id;
        }

        $currency = null;
        if ((int) $cookie->id_currency) {
            $currency = Currency::getCurrencyInstance((int) $cookie->id_currency);
        }
        if (!Validate::isLoadedObject($currency) || (bool) $currency->deleted || !(bool) $currency->active) {
            $currency = Currency::getCurrencyInstance(Configuration::get('PS_CURRENCY_DEFAULT'));
        }

        $cookie->id_currency = (int) $currency->id;
        if ($currency->isAssociatedToShop()) {
            return $currency;
        } else {
            // get currency from context
            $currency = Shop::getEntityIds('currency', Context::getContext()->shop->id, true, true);
            if (isset($currency[0]) && $currency[0]['id_currency']) {
                $cookie->id_currency = $currency[0]['id_currency'];

                return Currency::getCurrencyInstance((int) $cookie->id_currency);
            }
        }

        return $currency;
    }

I już sobie przypomniałem co było problemem. Z tego co pamiętam ta metoda ze zmianą języka jest wywoływana podczas każdego requestu, stąd w praktyce użytkownicy nie będą mogli zmienić sobie sami waluty na inną niż przypisana do języka. Czyli zawsze będzie tak jak to zdefiniujesz. 

Pamiętaj też o podmianie ID na poprawne dla twojego sklepu w tej linii:

if( $newLanguageId == 6 ) { Tools::setCurrencyManually( 2 ); }

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

  • 0

Super, wydaje mi się, że teraz wszystko działa :) Dziękuję Ci bardzo!  A możesz mi jeszcze powiedzieć jak mam to zrobić w drugą stronę? 

Bo teraz mam tak, że jak mam domyślnie polski język to mam PLN, zmieniam na angielski i mam EUR, ale jak kliknę znów na polski to mam nadal EUR. 

Powininem zrobić coś takiego?

if( $newLanguageId == 1 ) {
               Tools::setCurrencyManually( 1 );
            }
if( $newLanguageId == 2 ) {
               Tools::setCurrencyManually( 2 );
            }

 

Link to comment
Share on other sites

  • 0
10 minutes ago, stomasz said:

Super, wydaje mi się, że teraz wszystko działa :) Dziękuję Ci bardzo!  A możesz mi jeszcze powiedzieć jak mam to zrobić w drugą stronę? 

Bo teraz mam tak, że jak mam domyślnie polski język to mam PLN, zmieniam na angielski i mam EUR, ale jak kliknę znów na polski to mam nadal EUR. 

Powininem zrobić coś takiego?


if( $newLanguageId == 1 ) {
               Tools::setCurrencyManually( 1 );
            }
if( $newLanguageId == 2 ) {
               Tools::setCurrencyManually( 2 );
            }

 

Dokładnie tak :) 

  • Thanks 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...