Jump to content
sonkaya

Varsayılan Para Birimi USD, Gösterilen TL

Recommended Posts

Merhaba,

Satıştaki ürünlerim dolar bazında olduğundan dolayı varsayılan para birimini USD yaptım. TL ikinci para birimi. 

Prestashop'ta gösterilen para birimi diye birşey olmadığından direk olarak varsayılan kur neyse onu gösteriyor yani USD gösteriyor.Birçok yerli ziyaretçi USD fiyatı görünce TL ye çevirme işlemini kendi yapmak istemiyor. Para birimi bölümünden USD yerine TL yi seçmeye de üşeniyorlar ve siteden ayrılıyorlar :((( 

Şöyle bir şey yapmak mümkün müdür. Eğer dil seçimi Türkçe ise fiyatlar TL cinsinden gözüksün.

Yardımlarınız için şimdiden teşekkür ediyorum.

 

Not: Sitede iki dil var. TR ve ENG. TR varsayılan. Tarayıcı dili otomatik olarak belirle etkin.

Ver: 1.7.3.3

Share this post


Link to post
Share on other sites

Merhaba

1. yol

  • Ana menü -> localisation (uluslarasası) -> yerelleştirme bölümünden geolocation by ip seçeneğini aktif yapın
  • yerelleştirme -> konumlar -> ülkeler bölümünden Türkiye'yi seçin, varsayılan para birimini TRY yapın

Bu yöntemde geolocation ip bazlı konum bilgisine göre dil ve kur seçimi yapar. Ama konumu doğru bulma başarısı yüzde yüz değildir. 

 

2. yol 

Tools sınıfında aşağıdaki gibi bir fonksiyon olacak 

    static public function switchLanguage()

Bu fonksiyonun içine 

if(Tools::getValue('id_lang') == SEÇİLEN_DİLİN_ID_NO){
       $cookie->id_currency = SEÇİLECEK_KURUN_ID_NO;
       self::setCurrency();
}

şeklinde birşey eklenebilir. 

daha profesyonel olsun diye fonksiyon kopyalanıp owerride/class/Tools.php içine yazılabilir. 

Birinci yolu deneyin olmazsa ikinciyi yaparız. 

 

Share this post


Link to post
Share on other sites

Teşekkürler eticsoft

tools.php içerisinde bahsettiğiniz switchLanguage fonksiyonu ve alakalı olabilecek 5 adet daha var aşağıdaki gibi. 

setCurrency fonksiyonu ile ilgili bir şey yapılması gerekiyor mu?

"Şöyle bir şey yapmak mümkün müdür. Eğer dil seçimi Türkçe ise fiyatlar TL cinsinden gözüksün."

derken sayfa Türkçe açılıyorsa demek istedim. Yani varsayılan dil Türkçe olduğundan ve yurt dışından bile olsa Türk bir vatandaş Türkçe tarayıcısı ile sayfayı açtığında otomatik olarak Türkçe seçili geldiğinden yapacağımız değişiklik sayfa dili Türkçe ise USD yerine TL göstersin şeklinde olmalı. Ziyaretçi herhangi bir şey yapmasına gerek kalmamalı. (Yanlış anlaşılmamak için açıklama yapmak istedim)

100% çözüm için kodlarla oynamayı tercih ederim ama çok zor ise 1. yolu deneyeyim. 1. yol yüzde kaç sonuç verir acaba?

 

 public static function setCookieLanguage($cookie = null)
    {
        if (!$cookie) {
            $cookie = Context::getContext()->cookie;
        }
        /* If language does not exist or is disabled, erase it */
        if ($cookie->id_lang) {
            $lang = new Language((int)$cookie->id_lang);
            if (!Validate::isLoadedObject($lang) || !$lang->active || !$lang->isAssociatedToShop()) {
                $cookie->id_lang = null;
            }
        }

        if (!Configuration::get('PS_DETECT_LANG')) {
            unset($cookie->detect_language);
        }

        /* Automatically detect language if not already defined, detect_language is set in Cookie::update */
        if (!Tools::getValue('isolang') && !Tools::getValue('id_lang') && (!$cookie->id_lang || isset($cookie->detect_language))
            && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
            $array  = explode(',', Tools::strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']));
            $string = $array[0];

            if (Validate::isLanguageCode($string)) {
                $lang = Language::getLanguageByIETFCode($string);
                if (Validate::isLoadedObject($lang) && $lang->active && $lang->isAssociatedToShop()) {
                    Context::getContext()->language = $lang;
                    $cookie->id_lang = (int)$lang->id;
                }
            }
        }

        if (isset($cookie->detect_language)) {
            unset($cookie->detect_language);
        }

        /* If language file not present, you must use default language file */
        if (!$cookie->id_lang || !Validate::isUnsignedId($cookie->id_lang)) {
            $cookie->id_lang = (int)Configuration::get('PS_LANG_DEFAULT');
        }

        $iso = Language::getIsoById((int)$cookie->id_lang);
        @include_once(_PS_THEME_DIR_.'lang/'.$iso.'.php');

        return $iso;
    }

    /**
     * Set cookie id_lang
     */
    public static function switchLanguage(Context $context = null)
    {
        if (!$context) {
            $context = Context::getContext();
        }

        // Install call the dispatcher and so the switchLanguage
        // Stop this method 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;
        }

        // update language only if new id is different from old id
        // or if default language changed
        $cookie_id_lang = $context->cookie->id_lang;
        $configuration_id_lang = Configuration::get('PS_LANG_DEFAULT');
        if ((($id_lang = (int)Tools::getValue('id_lang')) && Validate::isUnsignedId($id_lang) && $cookie_id_lang != (int)$id_lang)
            || (($id_lang == $configuration_id_lang) && Validate::isUnsignedId($id_lang) && $id_lang != $cookie_id_lang)) {
            $context->cookie->id_lang = $id_lang;
            $language = new Language($id_lang);
            if (Validate::isLoadedObject($language) && $language->active) {
                $context->language = $language;
            }

            $params = $_GET;
            if (Configuration::get('PS_REWRITING_SETTINGS') || !Language::isMultiLanguageActivated()) {
                unset($params['id_lang']);
            }
        }
    }

    public static function getCountry($address = null)
    {
        $id_country = (int)Tools::getValue('id_country');
        if (!$id_country && isset($address) && isset($address->id_country) && $address->id_country) {
            $id_country = (int)$address->id_country;
        } elseif (Configuration::get('PS_DETECT_COUNTRY') && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
            preg_match('#(?<=-)\w\w|\w\w(?!-)#', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $array);
            if (is_array($array) && isset($array[0]) && Validate::isLanguageIsoCode($array[0])) {
                $id_country = (int)Country::getByIso($array[0], true);
            }
        }
        if (!isset($id_country) || !$id_country) {
            $id_country = (int)Configuration::get('PS_COUNTRY_DEFAULT');
        }
        return (int)$id_country;
    }

    /**
     * Set cookie currency from POST or default currency
     *
     * @return Currency object
     */
    public static function setCurrency($cookie)
    {
        if (Tools::isSubmit('SubmitCurrency') && ($id_currency = Tools::getValue('id_currency'))) {
            /** @var Currency $currency */
            $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;
    }

  /**
     * Return the CLDR associated with the context or given language_code
     *
     * @param Context|null $context
     * @param null         $language_code
     * @return \PrestaShop\PrestaShop\Core\Cldr\Repository
     * @throws PrestaShopException
     */
    public static function getCldr(Context $context = null, $language_code = null)
    {
        static $cldr_cache;
        if ($context) {
            $language_code = $context->language->locale;
        }

        if (!empty($cldr_cache[$language_code])) {
            $cldr = $cldr_cache[$language_code];
        } else {
            $cldr = new PrestaShop\PrestaShop\Core\Cldr\Repository($language_code);
            $cldr_cache[$language_code] = $cldr;
        }

        return $cldr;
    }

    /**
    * Return price with currency sign for a given product
    *
    * @param float $price Product price
    * @param object|array $currency Current currency (object, id_currency, NULL => context currency)
    * @return string Price correctly formated (sign, decimal separator...)
    * if you modify this function, don't forget to modify the Javascript function formatCurrency (in tools.js)
    */
    public static function displayPrice($price, $currency = null, $no_utf8 = false, Context $context = null)
    {
        if (!is_numeric($price)) {
            return $price;
        }
        if (!$context) {
            $context = Context::getContext();
        }
        if ($currency === null) {
            $currency = $context->currency;
        } elseif (is_int($currency)) {
            $currency = Currency::getCurrencyInstance((int)$currency);
        }

        $cldr = self::getCldr($context);

        return $cldr->getPrice($price, is_array($currency) ? $currency['iso_code'] : $currency->iso_code);
    }
 

Edited by sonkaya (see edit history)

Share this post


Link to post
Share on other sites

Merhaba

Biz teşekkür ederiz.

Aslında bu fonksiyonların hemen hepsinin geliştirilmesi gerekebilir çünkü $cookie->id_lang değişkenine doğrudan atama yapılıyor. 

Burada sizin kurun değişme koşulunu tanımlarken tüm akışı düşünmeniz gerekiyor. 

Prestashop ilk kez ziyaret edildiğinde default lang veya browser detected lang veya geoip kullanıyor ve dili çereze yazıyor. Daha sonra dil değişimi manuel olarak yapılabiliyor. kur seçimi de aynı şekilde. Biz burada bir dil ile bir kuru ilişkilendirip otomatik atama yaparsak kullanıcının kuru değiştirmesini engellememiz gerekiyor. 

 

Yani aslında aşağıdaki koşul sorunu çözüyor.

if ($cookie->id_lang == TURKCE_ID AND $cookie->id_currency != TRY_ID) {
	// kuru değiştir.
}

Bunu bir modül veya override içinde yazıp size verebiliriz. Ama bu durumda kurun manuel seçilmesini engellemek gerekiyor. Kurlar kutusunu kaldırmak gerekecek 

Ne dersiniz ?

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More