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

Материал из Umicms
Перейти к:навигация, поиск
(Решение)
Строка 22: Строка 22:
 
$selectedCurrency = $inst->getCurrency($currencyCode);
 
$selectedCurrency = $inst->getCurrency($currencyCode);
 
    
 
    
if($currencyCode && $selectedCurrency) {
+
if ($currencyCode && $selectedCurrency) {
 
$defaultCurrency = $inst->getDefaultCurrency();
 
$defaultCurrency = $inst->getDefaultCurrency();
  

Версия 13:17, 9 февраля 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/

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