Отображение цены товара на сайте в другой валюте (2.8)
Материал из Umicms
Стоит задача: в административной части сайта добавлять товары с ценой в долларах (USD) или евро (EUR), а на сайте отображать цены в рублях.
Для реализации данной задачи, версия системы должна быть не ниже 2.8.4. В конфигурационном файле (config.ini) установим валюту по умолчанию, допустим: default-currency = "", а для автоматического переключения валюты на сайте, воспользуемся кастомным макросом, который пропишем в файле ~classes/modules/custom.php, после слов: //TODO: Write your own macroses here
public function setcurrency(){ $inst = cmsController::getInstance()->getModule("emarket"); // Валюта в которой необходимо отображать цены на сайте. $currencyCode = "RUR"; $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), '/'); } } }
Вызов макроса необходимо прописать в шаблонах страниц, допустим в любом месте тэга <body>. Для tpl шаблонов вызов следующий:
%custom setcurrency()%
В результате, при использовании макроса:
%emarket price(%id%, 'short')%
цена будет указана в валюте, выбор которой был сделан в кастомном методе setcurrency(), 'short' - два шаблона, в папках:
- \tpls\emarket\
- \tpls\emarket\currency\
Для XSLT-Шаблонизатора, необходимо в основном xsl-шаблоне сайта, в котором прописан тег head и body,
необходимо прописать вызов:
<xsl:value-of select="document('udata://custom/setcurrency')" />
в теге head.
