Jump to content
Sign in to follow this  
SWORDMAN

[Решено] Где проверяется валюта по умолчанию?

Recommended Posts

Здравствуйте. Подскажите пожалуйста куда вставить этот код:

if ($this->language->get('code')=='en')
	{
	$this->currency->set('USD');
	} else if ($this->language->get('code')=='de')
	{
	$this->currency->set('USD');
	} else if ($this->language->get('code')=='pl')
	{
    $this->currency->set('EUR');
	} else if (($this->language->get('code')=='uk') or ($this->language->get('code')=='ru'))
	{
    $this->currency->set('UAH');
	};

или же как его изменить чтобы валюта переключалась в зависимости от языка без дополнительной перезагрузки страницы.

 

(сейчас работает но нужно обновлять страницу по 2 раза).

 

Спасибо.

Share this post


Link to post
Share on other sites

То есть нужно чтобы при переходе на английскую версию (сайт/en) по умолчанию стояла валюта $, на украинскую (сайт/uk/) грн и тд.

Share this post


Link to post
Share on other sites

Здравствуйте, Подскажите пожалуйста в каком файле определяется валюта по умолчанию? (Opencart 1.5.5.1.2).

 

Я так понимаю, язык по умолчанию определяется единицей в поле "Значение".

 

Не могу найти в каком файле opencart делает проверку.

Share this post


Link to post
Share on other sites

Спасибо. Пробовал как здесь https://opencartforum.com/topic/7752-решено-смена-валюты-один-раз-при-открытии-стран/

if (isset($this->request->get['currency']) && (array_key_exists($this->request->get['currency'], $this->currencies))) {
	 $this->set($this->request->get['currency']);
   } elseif ((isset($this->session->data['currency'])) && (array_key_exists($this->session->data['currency'], $this->currencies))) {
	$this->set($this->session->data['currency']);
   } elseif ((isset($this->request->cookie['currency'])) && (array_key_exists($this->request->cookie['currency'], $this->currencies))) {
	$this->set($this->request->cookie['currency']);
   } else {


if (($this->language->get('code')=='en') or ($this->language->get('code')=='de'))
	{
	$this->set('USD');
	} else if ($this->language->get('code')=='pl')
	{
         $this->set('PLN');
	} else if (($this->language->get('code')=='uk') or ($this->language->get('code')=='ru'))
	{
    $this->set('UAH');
	} else $this->set($this->config->get('config_currency'));
	}
   }
Не реагирует на этот код. Прописал по аналогии для условий что выше, работает, но только после еще одной перезагрузки страницы.  (к примеру открываю url английской версии сайта - остаются грн, перегружаю страницу - только тогда переключаются $).

 

Если вписать вместо 

  	public function format($number, $currency='', $value = '', $format = true) {
  	public function format($number, $currency='USD', $value = '', $format = true) {
то сразу со старта загружаются $, но некуда прикрутить проверку на текущий язык

Share this post


Link to post
Share on other sites

Кажется понял, проблема в $this->language->get('code') - оно срабатывает после 2 перезагрузки. Тогда непонятно как получить идентификатор текущего языка магазина без перезагрузки?

Share this post


Link to post
Share on other sites

То есть нужно чтобы при переходе на английскую версию (сайт/en) по умолчанию стояла валюта $, на украинскую (сайт/uk/) грн и тд.

Кажется понял, проблема в $this->language->get('code') - оно срабатывает после 2 перезагрузки. Тогда непонятно как получить идентификатор текущего языка магазина без перезагрузки? 

Share this post


Link to post
Share on other sites

Ну хоть кто-то сам пытается разобраться, остальным же "разжуй и в рот положи".

 

Вот Вам информация в помощь. 

 

Модель ModelLocalisationCurrency

# Загрузка модели:
$this->load->model('localisation/currency');
# Использование:
$this->model_localisation_currency->function_name($params);
# Функции:
public function getCurrencyByCode($currency) //Получение валюты по коду
public function getCurrencies() //Получение данных всех валют

Модель ModelLocalisationLanguage

# Загрузка модели:
$this->load->model('localisation/language');
# Использование:
$this->model_localisation_language->function_name($params);
# Функции:
public function getLanguage($language_id) //Получение языка
public function getLanguages() //Получение списка всех языков

Библиотека Library/currency

// Currency Валюта
$this->currency->set($currency); // Устанавливает код валюты, который будет использоваться в сессии
$this->currency->format($number, $currency = '', $value = '', $format = TRUE); // "format" валюты 
$this->currency->convert($value, $from, $to); // Конвертирует значение одной валюты в другую
$this->currency->getId(); // Возвращает ID текущей валюты (1, 2, 3, 4)
$this->currency->getCode(); // Возвращает код текущей валюты (USD, EUR, GBP, AUD, etc)
$this->currency->getValue($currency); // Возвращает текущий курс для указанной валюты
$this->currency->has($currency) // Проверяет существует ли указанная валюта
 

Библиотека Library/language

// Language Язык
$this->language->load($filename); // Загрузка языка
$this->language->get($key); // Возвращает значение языковой переменный текущего языка

Настройки config

$this->config->get('config_language');//Получение ID языка установленного в магазине по умолчанию

Инфу брал со своего блога

Share this post


Link to post
Share on other sites

Решение нашел, в обход opencart (наверно не самое лучшее, но работает).

 

 

В system/library/currency.php

 

после

} elseif ((isset($this->request->cookie['currency'])) && (array_key_exists($this->request->cookie['currency'], $this->currencies))) {
      		$this->set($this->request->cookie['currency']);

    	} else {

добавил код (получаю текущий урл средствами php и проверяю входит ли туда подстрока папки языка)

  $result = '';
  $default_port = 80;
 

  if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS']=='on')) {

    $result .= 'https://';

    $default_port = 443;
  } else {

    $result .= 'http://';
  }

  $result .= $_SERVER['SERVER_NAME'];
 

  if ($_SERVER['SERVER_PORT'] != $default_port) {

    $result .= ':'.$_SERVER['SERVER_PORT'];
  }

  $result .= $_SERVER['REQUEST_URI'];



			
	        if (strpos($result, '/en/')) 
			{
				$this->set('USD');
			} elseif (strpos($result, '/de/'))
			{
				$this->set('EUR');
			} elseif (strpos($result, '/pl/'))
			{
				$this->set('PLN');
			} else $this->set($this->config->get('config_currency'));

Для нового пользователя загружается валюта в зависимости от языка входа на сайт  

Share this post


Link to post
Share on other sites

afwollis, спасибо за ссылки, разобрался. Можно закрывать.

Share this post


Link to post
Share on other sites

Решение нашел, в обход opencart (наверно не самое лучшее, но работает).

это FAIL.

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.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.