Jump to content

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

Link to comment
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. 

 

Link to comment
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)
Link to comment
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 ?

 

 

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...