Есть у меня интернет магазин на котором понадобилось организовать мультивалютность. Мультивалютность в плане выбора валюты посетителем.
Для этого понадобятся некоторые знания в области php и html.
Создаем в шаблоне поле с выбором валюты. Я организовал это в шапке в виде ссылок
Для этого понадобятся некоторые знания в области php и html.
Создаем в шаблоне поле с выбором валюты. Я организовал это в шапке в виде ссылок
<span style="border: 1px dotted #00C8F2; border-radius: 3px;" id="currSp">
<a class="currency" href="[[createUrl? ¤=`uah`]]">грн</a>
<a class="currency" href="[[createUrl? ¤=`rur`]]">руб</a></span>
Затем создаем 3 сниппета: createUrl, getCurrency и countPrice.
Сниппет createUrl:
Сниппет createUrl:
<?php $output=""; $s = preg_match("/\?/", $_SERVER['REQUEST_URI']); $param = preg_match("/\?curr=(rur|uah)/", $_SERVER['REQUEST_URI']); if ($s!=0) { if($param!=0) $a = preg_replace("/\?curr=(rur|uah)/", "", $_SERVER['REQUEST_URI'])."?curr=".$curren; else $a = preg_replace("/\&curr=(rur|uah)/", "", $_SERVER['REQUEST_URI'])."&curr=".$curren; } else $a = preg_replace("/\?curr=(rur|uah)/", "", $_SERVER['REQUEST_URI'])."/?curr=".$curren; //$curr = $_SERVER['REQUEST_URI']; //$a = substr($curr, -9); $output=$a; return $output; ?>
Как понятно из названия, он нужен для создания ссылки по которой будет формироваться get запрос с валютой.
Сниппет getCurrency нужен для чтения get запроса сформированным сниппетом выше:
if (!isset($_SESSION['currency']))
$_SESSION['currency']='rur';
else {
if ($_SESSION['currency'] == 'rur')
$a = 'руб.';
else
$a='грн.';
}
if (isset($_GET['curr']))
{
if ($_GET['curr'] == 'uah'){
$_SESSION['currency']='uah';
$a = 'грн.';
}
else if ($_GET['curr']=='rur')
{
$_SESSION['currency']='rur';
$a = 'руб.';
}
}
//$_SESSION['shk_currency'] = $_SESSION['currency'];
$output=$a;
return $output;
Сниппет getCurrency нужен для чтения get запроса сформированным сниппетом выше:
<?php
$output="";if (!isset($_SESSION['currency']))
$_SESSION['currency']='rur';
else {
if ($_SESSION['currency'] == 'rur')
$a = 'руб.';
else
$a='грн.';
}
if (isset($_GET['curr']))
{
if ($_GET['curr'] == 'uah'){
$_SESSION['currency']='uah';
$a = 'грн.';
}
else if ($_GET['curr']=='rur')
{
$_SESSION['currency']='rur';
$a = 'руб.';
}
}
//$_SESSION['shk_currency'] = $_SESSION['currency'];
$output=$a;
return $output;
?>
<?php
$output="";
$price*=1;
if (isset($_SESSION['currency']))
{
if ($_SESSION['currency']=='uah')
{
$price*=0.25;
}
}
$output=round($price);
return $output;
?>
Вместо 0,25 вы указываете свое значение по которому будет вестись пересчет.
У меня каталог заполнялся в рублях и потом переводился в гривны.
Теперь во всех шаблонах и ресурсах в местах вызова Shopkeeper вместо ¤cy=`руб.`, вы указываете ¤cy=`[!getCurrency!]`.
В шаблоне корзины, в шаблоне раздела и товара заменяете все вызовы плейсхолдеров [+price+] и [+currency+] на [!countPrice? &price=`[+price+]` !] и [[getCurrency]] соответственно.
Теперь нужно организовать саму корзину, чтоб в ней и общая сумма считалась по пересчитанным значениям. Для этого находим ваш шаблон корзины и ищем где выводится общая цена. Важно: в шаблонах корзины, там где выводится общая сумма оставляем [+price_total+] или [+total_price+].
Теперь перейдем к серверной части. Находим класс шопкипера. Он находится по адресу /assets/snippets/shopkeeper/classes/class.shopkeeper.php.
Находим функцию getTotal и вставляем вместо
$totalPrice += $price*$count;
if ($_SESSION['currency'] == '
uah')
$totalPrice += round($price*0.25)*$count;
else
$totalPrice += $price*$count;
Это требуется для расчета общей стоимости в корзине и для правильного формирования цен в письмах.
Теперь нужно разобраться с письмами. Находим шаблоны писем /assets/snippets/shopkeeper/module/templates/mail_shipped.tpl и /assets/snippets/shopkeeper/module/templates/mail_changeStatus.tpl и в них меняем строки
<ul>
[+loop+] <li>[+<s>+]<b><a href="[+link+]" target="_blank">[+name+]</a></b> ([+price+])[+addit_data+] <b> x [+count+] шт.</b>[+</s>+]</li>
[+end_loop+]
</ul>
<ul>
[+loop+]
<li>[+<s>+]<b><a href="[+link+]" target="_blank">[+name+]</a></b> ([[countPrice? &price=`[+price+]` ]])[+addit_data+] <b> x [+count+] шт.</b>[+</s>+]</li>
[+end_loop+]
</ul>
Теперь на всех страницах, где вызывается корзина и выводятся товары, в настройках страницы снимаем галочку с "кешируемый".
Комментариев нет:
Отправить комментарий