sonkaya Posted June 23, 2018 Share Posted June 23, 2018 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 More sharing options...
eticsoft Posted June 23, 2018 Share Posted June 23, 2018 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 More sharing options...
sonkaya Posted June 23, 2018 Author Share Posted June 23, 2018 (edited) 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 June 23, 2018 by sonkaya (see edit history) Link to comment Share on other sites More sharing options...
eticsoft Posted June 25, 2018 Share Posted June 25, 2018 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now