Перейти к содержанию
SWORDMAN

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

Рекомендуемые сообщения

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

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 раза).

 

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо. Пробовал как здесь 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) {
то сразу со старта загружаются $, но некуда прикрутить проверку на текущий язык

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Модель 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 языка установленного в магазине по умолчанию

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решение нашел, в обход 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'));

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

это FAIL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.