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

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 9 промежуточных версий 4 участников)
Строка 1: Строка 1:
Стоит задача: в административной части сайта добавлять товары с ценой в долларах (USD) или евро (EUR), а на сайте отображать цены в рублях.
+
'''Актуально для версии 20.'''
Для этого, в конфигурационном файле (config.ini) установим валюту по умолчанию, допустим: default-currency = "USD",
+
 
а для автоматического переключения валюты на сайте, воспользуемся кастомным макросом, который пропишем в файле ~classes/modules/custom.php, после слов: //TODO: Write your own macroses here
+
==Задача==
 +
Изменение валюты, в которой отображаются цены на сайте, на доллары (USD), евро (EUR) или любую другую.
 +
 
 +
==Решение==
 +
 
 +
Для реализации этой задачи версия системы должна быть не ниже 2.8.4.
 +
 
 +
В конфигурационном файле (config.ini) установим валюту по умолчанию, допустим: default-currency = "RUR",
 +
а для автоматического переключения валюты на сайте, воспользуемся кастомным макросом, который пропишем в файле  
 +
/classes/modules/custom.php для старой реализации модулей
 +
или
 +
/classes/components/custom.php для новой реализации модулей, после слов: //TODO: Write your own macroses here
  
 
<source lang="php">
 
<source lang="php">
public function setcurrency(){
+
public function setcurrency($currencyCode = 'RUR'){
$inst = cmsController::getInstance()->getModule("emarket");
+
$inst = cmsController::getInstance()->getModule("emarket");
$currencyCode = "RUR";
+
 
$selectedCurrency = $inst->getCurrency($currencyCode);
+
$selectedCurrency = $inst->getCurrency($currencyCode);
if($selectedCurrency) {
+
 
$defaultCurrency = $inst->getDefaultCurrency();
+
if ($currencyCode && $selectedCurrency) {
$customer = customer::get();
+
$defaultCurrency = $inst->getDefaultCurrency();
if($customer->preffered_currency != $selectedCurrency->id) {
+
 
if($selectedCurrency->id == $defaultCurrency->id) {
+
if (permissionsCollection::getInstance()->isAuth()){
$customer->preffered_currency = null;
+
$customer = customer::get();
} else {
+
if($customer->preffered_currency != $selectedCurrency->id) {
$customer->preffered_currency = $selectedCurrency->id;
+
if($selectedCurrency->id == $defaultCurrency->id) {
}
+
$customer->preffered_currency = null;
$customer->commit();
+
} else {
}
+
$customer->preffered_currency = $selectedCurrency->id;
}
+
}
 +
$customer->commit();
 +
}
 +
} else {
 +
setcookie('customer_currency', $selectedCurrency->id, (time() + 2678400), '/');
 +
}
 +
}
 
}
 
}
 
</source>
 
</source>
 +
 +
===TPL шаблонизатор===
 +
 
Вызов макроса необходимо прописать в шаблонах страниц, допустим в любом месте тэга <body>.  
 
Вызов макроса необходимо прописать в шаблонах страниц, допустим в любом месте тэга <body>.  
 
Для tpl шаблонов вызов следующий:
 
Для tpl шаблонов вызов следующий:
<pre>
+
<source lang="php">
 +
%custom setcurrency('USD')%
 +
</source>
 +
или
 +
<source lang="php">
 
%custom setcurrency()%
 
%custom setcurrency()%
</pre>
+
</source>
 +
для смены валюты отображения цен на валюту по умолчанию.
  
 
В результате, при использовании макроса:
 
В результате, при использовании макроса:
<pre>
+
<source lang="php">
 
%emarket price(%id%, 'short')%
 
%emarket price(%id%, 'short')%
</pre>
+
</source>
  
 
цена будет указана в валюте, выбор которой был сделан в кастомном методе setcurrency(), 'short' - два шаблона, в папках:
 
цена будет указана в валюте, выбор которой был сделан в кастомном методе setcurrency(), 'short' - два шаблона, в папках:
 
* \tpls\emarket\
 
* \tpls\emarket\
 
* \tpls\emarket\currency\
 
* \tpls\emarket\currency\
 +
 +
===XSLT шаблонизатор===
 +
 +
Для XSLT-Шаблонизатора, необходимо в основном xsl-шаблоне сайта, в котором прописан тег '''head''' и '''body''',
 +
необходимо прописать вызов:
 +
<source lang="xml">
 +
<xsl:value-of select="document('udata://custom/setcurrency/USD/')" />
 +
</source>
 +
или
 +
<source lang="xml">
 +
<xsl:value-of select="document('udata://custom/setcurrency/')" />
 +
</source>
 +
для смены валюты отображения цен на валюту по умолчанию.
 +
 +
в теге head.
 +
 +
===PHP шаблонизатор===
 +
 +
В PHP шаблонизаторе нужно вызвать этот макрос перед тем как отображать цены товаров.
 +
 +
Оптимальным вариантом будет вызвать его в точке входа в шаблон, например для шаблона demomarket это будет файл
 +
 +
/templates/demomarket/php/common.phtml
 +
 +
<source lang="php">
 +
$this->macros('custom', 'setcurrency', array('USD'));
 +
</source>
 +
 +
или
 +
 +
<source lang="php">
 +
$this->macros('custom', 'setcurrency');
 +
</source>
 +
 +
для смены валюты отображения цен на валюту по умолчанию.
 +
 +
===AJAX запрос===
 +
 +
Так же сменить валюту на сайте можно AJAX запросом на адрес:
 +
 +
http://mysite.ru/udata://custom/setcurrency/USD/
 +
 +
Для изменения цен на сайте необходимо после запроса перезагрузить страницу.
 +
 +
[[Категория:Модуль Интернет магазин]][[Категория:Написание кастомных макросов]]

Текущая версия на 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/

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