Отображение цены товара на сайте в другой валюте — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показаны 2 промежуточные версии 2 участников)
Строка 1: Строка 1:
 
 
'''Актуально для версии 20.'''
 
'''Актуально для версии 20.'''
  
 
==Задача==  
 
==Задача==  
Изменение валюты в которой отображаются цены на сайте на доллары (USD), евро (EUR) или любую другую.
+
Изменение валюты, в которой отображаются цены на сайте, на доллары (USD), евро (EUR) или любую другую.
  
 
==Решение==  
 
==Решение==  
  
Для реализации данной задачи, версия системы должна быть не ниже 2.8.4.
+
Для реализации этой задачи версия системы должна быть не ниже 2.8.4.
  
 
В конфигурационном файле (config.ini) установим валюту по умолчанию, допустим: default-currency = "RUR",
 
В конфигурационном файле (config.ini) установим валюту по умолчанию, допустим: default-currency = "RUR",
Строка 13: Строка 12:
 
/classes/modules/custom.php для старой реализации модулей
 
/classes/modules/custom.php для старой реализации модулей
 
или
 
или
/classes/components/custom.php для новой реализации модулей
+
/classes/components/custom.php для новой реализации модулей, после слов: //TODO: Write your own macroses here
, после слов: //TODO: Write your own macroses here
 
  
 
<source lang="php">
 
<source lang="php">
Строка 88: Строка 86:
  
 
<source lang="php">
 
<source lang="php">
$this->macros('custom', 'setcurrency', array('USD'))
+
$this->macros('custom', 'setcurrency', array('USD'));
 
</source>
 
</source>
  
Строка 94: Строка 92:
  
 
<source lang="php">
 
<source lang="php">
$this->macros('custom', 'setcurrency')
+
$this->macros('custom', 'setcurrency');
 
</source>
 
</source>
  

Текущая версия на 11:05, 11 февраля 2019

Актуально для версии 20.

Задача

Изменение валюты, в которой отображаются цены на сайте, на доллары (USD), евро (EUR) или любую другую.

Решение

Для реализации этой задачи версия системы должна быть не ниже 2.8.4.

В конфигурационном файле (config.ini) установим валюту по умолчанию, допустим: default-currency = "RUR", а для автоматического переключения валюты на сайте, воспользуемся кастомным макросом, который пропишем в файле /classes/modules/custom.php для старой реализации модулей или /classes/components/custom.php для новой реализации модулей, после слов: //TODO: Write your own macroses here

public function setcurrency($currencyCode = 'RUR'){
	$inst = cmsController::getInstance()->getModule("emarket");
   
	$selectedCurrency = $inst->getCurrency($currencyCode);
  
	if ($currencyCode && $selectedCurrency) {
		$defaultCurrency = $inst->getDefaultCurrency();

		if (permissionsCollection::getInstance()->isAuth()){
			$customer = customer::get();
			if($customer->preffered_currency != $selectedCurrency->id) {
				if($selectedCurrency->id == $defaultCurrency->id) {
					$customer->preffered_currency = null;
				} else {
					$customer->preffered_currency = $selectedCurrency->id;
				}
				$customer->commit();
			}
		} else {
			setcookie('customer_currency', $selectedCurrency->id, (time() + 2678400), '/');
		}
	}
}

TPL шаблонизатор

Вызов макроса необходимо прописать в шаблонах страниц, допустим в любом месте тэга <body>. Для tpl шаблонов вызов следующий:

%custom setcurrency('USD')%

или

%custom setcurrency()%

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

В результате, при использовании макроса:

%emarket price(%id%, 'short')%

цена будет указана в валюте, выбор которой был сделан в кастомном методе setcurrency(), 'short' - два шаблона, в папках:

  • \tpls\emarket\
  • \tpls\emarket\currency\

XSLT шаблонизатор

Для XSLT-Шаблонизатора, необходимо в основном xsl-шаблоне сайта, в котором прописан тег head и body, необходимо прописать вызов:

<xsl:value-of select="document('udata://custom/setcurrency/USD/')" />

или

<xsl:value-of select="document('udata://custom/setcurrency/')" />

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

в теге head.

PHP шаблонизатор

В PHP шаблонизаторе нужно вызвать этот макрос перед тем как отображать цены товаров.

Оптимальным вариантом будет вызвать его в точке входа в шаблон, например для шаблона demomarket это будет файл

/templates/demomarket/php/common.phtml

$this->macros('custom', 'setcurrency', array('USD'));

или

$this->macros('custom', 'setcurrency');

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

AJAX запрос

Так же сменить валюту на сайте можно AJAX запросом на адрес:

http://mysite.ru/udata://custom/setcurrency/USD/

Для изменения цен на сайте необходимо после запроса перезагрузить страницу.