Отображение цены товара на сайте в другой валюте — различия между версиями
VITL' (обсуждение | вклад) |
Whoa (обсуждение | вклад) |
||
(не показано 7 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
− | ''' | + | '''Актуально для версии 20.''' |
− | Для реализации | + | ==Задача== |
− | В конфигурационном файле (config.ini) установим валюту по умолчанию, допустим: default-currency = "", | + | Изменение валюты, в которой отображаются цены на сайте, на доллары (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"); | |
− | |||
− | |||
− | + | $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 { | } else { | ||
− | + | $customer->preffered_currency = $selectedCurrency->id; | |
} | } | ||
+ | $customer->commit(); | ||
} | } | ||
+ | } else { | ||
+ | setcookie('customer_currency', $selectedCurrency->id, (time() + 2678400), '/'); | ||
+ | } | ||
+ | } | ||
} | } | ||
</source> | </source> | ||
+ | |||
+ | ===TPL шаблонизатор=== | ||
+ | |||
Вызов макроса необходимо прописать в шаблонах страниц, допустим в любом месте тэга <body>. | Вызов макроса необходимо прописать в шаблонах страниц, допустим в любом месте тэга <body>. | ||
Для tpl шаблонов вызов следующий: | Для tpl шаблонов вызов следующий: | ||
− | < | + | <source lang="php"> |
+ | %custom setcurrency('USD')% | ||
+ | </source> | ||
+ | или | ||
+ | <source lang="php"> | ||
%custom setcurrency()% | %custom setcurrency()% | ||
− | </ | + | </source> |
+ | для смены валюты отображения цен на валюту по умолчанию. | ||
В результате, при использовании макроса: | В результате, при использовании макроса: | ||
− | < | + | <source lang="php"> |
%emarket price(%id%, 'short')% | %emarket price(%id%, 'short')% | ||
− | </ | + | </source> |
цена будет указана в валюте, выбор которой был сделан в кастомном методе setcurrency(), 'short' - два шаблона, в папках: | цена будет указана в валюте, выбор которой был сделан в кастомном методе setcurrency(), 'short' - два шаблона, в папках: | ||
Строка 47: | Строка 62: | ||
* \tpls\emarket\currency\ | * \tpls\emarket\currency\ | ||
+ | ===XSLT шаблонизатор=== | ||
Для XSLT-Шаблонизатора, необходимо в основном xsl-шаблоне сайта, в котором прописан тег '''head''' и '''body''', | Для XSLT-Шаблонизатора, необходимо в основном xsl-шаблоне сайта, в котором прописан тег '''head''' и '''body''', | ||
необходимо прописать вызов: | необходимо прописать вызов: | ||
<source lang="xml"> | <source lang="xml"> | ||
− | <xsl:value-of select="document('udata://custom/setcurrency')" /> | + | <xsl:value-of select="document('udata://custom/setcurrency/USD/')" /> |
</source> | </source> | ||
+ | или | ||
+ | <source lang="xml"> | ||
+ | <xsl:value-of select="document('udata://custom/setcurrency/')" /> | ||
+ | </source> | ||
+ | для смены валюты отображения цен на валюту по умолчанию. | ||
в теге head. | в теге 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/
Для изменения цен на сайте необходимо после запроса перезагрузить страницу.