Перейти к содержимому


Делаем цены в двух валютах


  • Вы не можете ответить в тему
Сообщений в теме: 21

#1 vsupport

    Продвинутый пользователь

  • Администраторы
  • 758 сообщений
Репутация: 31
Ассистент

Отправлено 24 May 2011 - 01:10 PM

Это примерно будет выглядеть так (Цена: 25 у.е/700 руб.). В файле functions/functions.php заменяется функция show_price на эту:
(валюты меняются внутри функции $valuta1 и $valuta2, это ID валют)
function show_price($price, $custom_currency = 0)
{
global $selected_currency_details;

$valuta1 = 1;
$valuta2 = 4;

$q = db_query("select code, currency_value, where2show, currency_iso_3, Name from ".CURRENCY_TYPES_TABLE." where CID=".$valuta1) or die (db_error());
if ($row = db_fetch_row($q))
{
$selected_currency_details = $row; //for show_price() function
}


$q = db_query("select code, currency_value, where2show, currency_iso_3, Name from ".CURRENCY_TYPES_TABLE." where CID=".$valuta2) or die (db_error());
if ($row = db_fetch_row($q))
{
$selected_currency_details2 = $row; //for show_price() function
}

//is exchange rate negative or 0?
if ($selected_currency_details[1] == 0) return "";
if ($selected_currency_details2[1] == 0) return "";

//now show price
$price2 = round(100*$price*$selected_currency_details[1])/100;
if (round($price2*10) == $price2*10 && round($price2)!=$price2)
$price2 = "$price2"."0"; //to avoid prices like 17.5 - write 17.50 instead

//now show price
$price1 = round(100*$price*$selected_currency_details2[1])/100;
if (round($price1*10) == $price1*10 && round($price1)!=$price1)
$price1 = "$price1"."0"; //to avoid prices like 17.5 - write 17.50 instead

$price2 = _formatPrice( $price2 );
$price1 = _formatPrice( $price1 );
$pricez = $selected_currency_details[2] ?
$price2.$selected_currency_details[0] :
$selected_currency_details[0].$price2;
$pricez1 = $selected_currency_details2[2] ?
$price1.$selected_currency_details2[0] :
$selected_currency_details2[0].$price1;

return $pricez." / ".$pricez1;
}

источник


  • 0

#2 revit

    Пользователь

  • Пользователи
  • PipPip
  • 10 сообщений
Репутация: 0
Начинающий

Отправлено 03 July 2011 - 04:23 PM

Хотелось сделать цену не в2-х валютах, а розничная и оптовая,но возникает вопрос как будет вестись расчёт (оформление покупки).В этом случае оставить розничную нужно.Спасибо.
  • 0

#3 vsupport

    Продвинутый пользователь

  • Администраторы
  • 758 сообщений
Репутация: 31
Ассистент

Отправлено 03 July 2011 - 04:33 PM

Хотелось сделать цену не в2-х валютах, а розничная и оптовая,но возникает вопрос как будет вестись расчёт (оформление покупки).В этом случае оставить розничную нужно.Спасибо.

А не проще будет при оформлении заказа выставить определенный % с определенной суммы. За счет % это и будет оптовая цена. К примеру у моего клиента сделано так: Если покупка сделана свыше чем 1000 рублей скидка 3% если свыше 10000 рублей скидка 5% и т.д.
  • 0

#4 revit

    Пользователь

  • Пользователи
  • PipPip
  • 10 сообщений
Репутация: 0
Начинающий

Отправлено 03 July 2011 - 04:40 PM

А не проще будет при оформлении заказа выставить определенный % с определенной суммы. За счет % это и будет оптовая цена. К примеру у моего клиента сделано так: Если покупка сделана свыше чем 1000 рублей скидка 3% если свыше 10000 рублей скидка 5% и т.д.

Спасибо,это понятный момент и я об этом знаю.Надо ,чтобы покупатель видел зрительно Розничную и Оптовую,как бы две цены-кнопки
  • 0

#5 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 04 July 2011 - 04:37 PM

Этот вопрос можно решить через дополнительные характеристки. Значение по умолчанию Розничная цена или селектором выбрать оптовую цену, она и добавится в корзину. Можно таким образом сделать несколько цен. И не мудрить с кнопками.
  • 0

#6 revit

    Пользователь

  • Пользователи
  • PipPip
  • 10 сообщений
Репутация: 0
Начинающий

Отправлено 04 July 2011 - 04:46 PM

Спасибо,это понятный момент и я об этом знаю.Надо ,чтобы покупатель видел зрительно Розничную и Оптовую,как бы две цены-кнопки


Спасибо,будем творить.
  • 0

#7 Robby

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 162 сообщений
Репутация: 75
Продвинутый

Отправлено 04 July 2011 - 08:08 PM

Делаем цены в двух валютах

к сожалению это будет работать до тех пор пока у товара не появяться дополнительные характеристики. Если у товара есть дополнительные характеристки, то будет отбражаться только цена в основной валюте. Нужно править еще какую-то функцию, которая отвечает за изменение цены при выборе дополнительнх характеристик.
  • 0

#8 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 05 July 2011 - 11:06 AM

тогда неоходимо добавлять поле оптовой цены в таблицу продукта и править функции отвечающие за вывод в админке, пользовательском шаблоне и добавление цены в БД. Тогда можно легко создать две кнопки. Но работы тут прилично.
  • 0

#9 Dbus

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 05 July 2011 - 02:43 PM

к сожалению это будет работать до тех пор пока у товара не появяться дополнительные характеристики. Если у товара есть дополнительные характеристки, то будет отбражаться только цена в основной валюте. Нужно править еще какую-то функцию, которая отвечает за изменение цены при выборе дополнительнх характеристик.


нужно редактировать function GetCurrentCurrency() в product_detailed.tpl.html и product_brief.tpl.html. У меня получился вывод 2х валют с динамической ценой у товара с характеристиками только в карточке товара, в категории пока не выходит, буду думать дальше )
  • 0
502 Bad Gateway

#10 Robby

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 162 сообщений
Репутация: 75
Продвинутый

Отправлено 04 September 2011 - 01:58 PM

Хотелось бы добить эту тему. Проблема с отображением нескольких цен при наличии дополнительных характеристик вызвана ява скриптом product_detailed.tpl.html и product_brief.tpl.html
            <script type="text/javascript">
function GetCurrentCurrency()
{
{/literal}
_selectionCount={$select_counter_var};
 _sum = {$product_info.PriceWithOutUnit};
{counter name='select_counter2' start=1 skip=1 print=false assign='select_counter_var2'}
{section name=i loop=$product_extra}
{section name=k loop=$product_extra[i].option_show_times}
 _value =
document.MainForm.option_select_{$select_counter_var2}.value;
price_surplus = ( _value.split(":") )[0];
 _sum += new Number( price_surplus );
variantID = ( _value.split(":") )[1];
document.HiddenFieldsForm.option_select_hidden_{$select_counter_var2}.value = variantID;
{counter name=select_counter2}
{/section}
{/section}
 _sum = Math.round(_sum*100)/100;
_sumStr = new String(_sum);
 _commaIndex = _sumStr.indexOf(".");
if ( _commaIndex == -1 )
 _sumStr = _sum;
 else
 _sumStr = _sumStr.substr(0, _commaIndex + 3);
{php}
echo("locationPriceUnit=".getLocationPriceUnit().";\n");
echo("priceUnit='".getPriceUnit()."';\n");
{/php}
 _sumStr = _formatPrice( _sumStr, {$currency_roundval});
if ( locationPriceUnit )
document.getElementById('optionPrice').innerHTML = _sumStr + document.MainForm.priceUnit.value;
else
document.getElementById('optionPrice').innerHTML = document.MainForm.priceUnit.value + _sumStr;
{literal}
}
{/literal}
GetCurrentCurrency();
</script>

Как вариант решения, если дополнительные характеристики не меняют цену товара то просто убрать из шаблона код id="optionPrice_{$product_info.productID}". Но такое решение не очень удачное.

Альтернативный способ (удобен возможностью выводить любое количество цен, путем перечисления прямо в шаблоне)

Вывести две и более цены (можно всех) выглядит так:
В папке core\smarty\plugins создаем файл function.price.php со следующим содержимим (вместо префикс_вашей_базы указываем префикс своей базы)

function smarty_function_price( $params, &$smarty )
{
$disp='';
$sql='SELECT Price FROM префикс_вашей_базы_products WHERE productID="'.$params['pid'].'"';
if($r=mysql_query($sql)){
$res=mysql_fetch_assoc($r);
$price=$res['Price'];
}
$curr=explode(',',$params['curr']);
$curc=$params['curc'];
$a=1;
foreach ($curr as $d){
if ($d != $curc){
$sql='SELECT * FROM префикс_вашей_базы_currency_types WHERE CID="'.$d.'"';
if($r=mysql_query($sql)){
$res=mysql_fetch_assoc($r);
$curs=$res['currency_value'];
$nprice=round($curs*$price,$res['roundval']);
$nprice=number_format($nprice,'2','.',' ');
if ($res['where2show']) $nprice.=' '.$res['code'];
else $nprice=$res['code'].$nprice;
$disp.='
'.$nprice.'
';
}
}
$a++;
}
return $disp;
}
?>

в файлах product_brief.tpl.html и product_detailed.tpl.html (и других где требуется вывод в несколких ценах) добавляем вызов плагина {price pid=`$product_info.productID` curr='1,3,5' curc=$current_currency},
там где выводится цена - переменная Smarty {$product_info.PriceWithUnit}
<td class="price" id="optionPrice_{$product_info.productID}">{if $currencies_count ne 0}{if $product_info.Price <= 0}{$smarty.const.STRING_NOPRODUCT_IN}{else}{$product_info.PriceWithUnit}{price pid=`$product_info.productID` curr='1,3,5' curc=$current_currency}{/if}{/if}</td>
где pid – это ID продукта; curr – перечень CID валют, разделенный запятыми; curc - текущая валюта (если параметр будет отсутствовать будут выведены все цены с CID перечисленными в curr='1,3,5'. Полезно если удалить стандартный вывод цены {$product_info.PriceWithUnit}) .

curr – перечень CID валют - смотрим в базе данных (например через phpmyadmin - таблица currency_types), у меня например так
1 Доллары США
3 Рубли
5 Гривна
Добавив стили для .cena1, .cena2 ... получим разное оформлениие для каждой цены. Опять же при дополнительых характеристиках будет только одна цена.
  • 0

#11 Cheshir

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 212 сообщений
Репутация: 48
Ассистент

Отправлено 05 September 2011 - 12:49 PM

Никто не сталкивался с модулем, позволяющим устанавливать валюту для каждого продукта в отдельности?

Объясню для чего требуется.

Есть номральные поставщики, которые работают ценами в рубях, а есть некоторые личности, которые берут для исчесления валюту в USD, другими словами, цена продукции постоянно плавующая, зависящая от курса ЦБ на текущий момент.

Был бы модуль способный устанавливать цену в определенной валюте для каждого товара в отдельность, то можно было бы задавать курс через админ-панель. Это бы решило данную проблему.
  • 0

#12 venceslauzzz

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 54 сообщений
Репутация: -2
Начинающий

Отправлено 02 December 2011 - 01:42 PM

Никто не сталкивался с модулем, позволяющим устанавливать валюту для каждого продукта в отдельности?

Объясню для чего требуется.

Есть номральные поставщики, которые работают ценами в рубях, а есть некоторые личности, которые берут для исчесления валюту в USD, другими словами, цена продукции постоянно плавующая, зависящая от курса ЦБ на текущий момент.

Был бы модуль способный устанавливать цену в определенной валюте для каждого товара в отдельность, то можно было бы задавать курс через админ-панель. Это бы решило данную проблему.

Поддерживаю вопрос. Тоже интересует данное решение. На днях заказчик задал мне такой вопрос. Есть у кого-нибудь такое решение или подскажите откуда ріть?
  • 0
Спасибо алфавиту за любезно предоставленные буквы! Во время написания ни одна буква не пострадала.

#13 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 02 December 2011 - 01:48 PM

Добавить в админке вывод валют например чекбоксами
Добавить в таблицу БД поля или одно и записывать с разделителями

Вывод всех валют я думаю сделать не проблема
к этому выводу добавить условие, если выбрана валюта - отображать цену.

Вопрос стоит в другом - а в какой валюте заказ будет оформляться? не может же быть во всех стразу.
  • 0

#14 venceslauzzz

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 54 сообщений
Репутация: -2
Начинающий

Отправлено 02 December 2011 - 02:32 PM

было бы удобнее вначале создать в настройках свои валюты и указать основную для вывода на страницах магазина. затем на странице редактировании товара должны отобразиться несколько полей, равным количествам созданных валют взятых из базы, и дать возможность вписать цену в любое поле валюты. остальные должны автоматом подставиться исходя из формулы отношения к основной валюте.
  • 0
Спасибо алфавиту за любезно предоставленные буквы! Во время написания ни одна буква не пострадала.

#15 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 02 December 2011 - 02:40 PM

было бы удобнее вначале создать в настройках свои валюты и указать основную для вывода на страницах магазина.

это и так есть....

затем на странице редактировании товара должны отобразиться несколько полей, равным количествам созданных валют взятых из базы, и дать возможность вписать цену в любое поле валюты. остальные должны автоматом подставиться исходя из формулы отношения к основной валюте.


это тоже можно подтянуть но валюты рассчитываются курсом и в базу не записываются как я подозреваю, поэтому придется добавить поля в БД и при добавлении товара дописывать еще и поля с валютами - это не проблема..... и редактирование тоже не проблема

проблема что при загрузке/выгрузке через прайс учитываться будет только основная валюта
  • 0

#16 venceslauzzz

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 54 сообщений
Репутация: -2
Начинающий

Отправлено 03 February 2012 - 08:15 PM

Cheshir, могу посоветовать спеца, который мне помог решить проблему с разной валютой товара
  • 0
Спасибо алфавиту за любезно предоставленные буквы! Во время написания ни одна буква не пострадала.

#17 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 03 February 2012 - 09:28 PM

Поддерживаю вопрос. Тоже интересует данное решение. На днях заказчик задал мне такой вопрос. Есть у кого-нибудь такое решение или подскажите откуда ріть?

Какая разница покупателю, в какой валюте работает Ваш поставщик?
Какая связь между "мой поставщик работает в долларах" и ценой товара для конечного покупателя? Чо, доллар нынче в полтора раза прыгает или интернет-магазины на марже в три процента работают? :)

---------- Сообщение объединено ----------

Cheshir, могу посоветовать спеца, который мне помог решить проблему с разной валютой товара

Ага. С пятого сентября прошлого года сидит и ждет, кто ж спеца предложит :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#18 hels

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 176 сообщений
Репутация: 3
Начинающий

Отправлено 16 May 2013 - 09:43 AM

Это примерно будет выглядеть так (Цена: 25 у.е/700 руб.). В файле functions/functions.php заменяется функция show_price на эту:
(валюты меняются внутри функции $valuta1 и $valuta2, это ID валют)

function show_price($price, $custom_currency = 0)
{
global $selected_currency_details;

$valuta1 = 1;
$valuta2 = 4;

$q = db_query("select code, currency_value, where2show, currency_iso_3, Name from ".CURRENCY_TYPES_TABLE." where CID=".$valuta1) or die (db_error());
if ($row = db_fetch_row($q))
{
$selected_currency_details = $row; //for show_price() function
}


$q = db_query("select code, currency_value, where2show, currency_iso_3, Name from ".CURRENCY_TYPES_TABLE." where CID=".$valuta2) or die (db_error());
if ($row = db_fetch_row($q))
{
$selected_currency_details2 = $row; //for show_price() function
}

//is exchange rate negative or 0?
if ($selected_currency_details[1] == 0) return "";
if ($selected_currency_details2[1] == 0) return "";

//now show price
$price2 = round(100*$price*$selected_currency_details[1])/100;
if (round($price2*10) == $price2*10 && round($price2)!=$price2)
$price2 = "$price2"."0"; //to avoid prices like 17.5 - write 17.50 instead

//now show price
$price1 = round(100*$price*$selected_currency_details2[1])/100;
if (round($price1*10) == $price1*10 && round($price1)!=$price1)
$price1 = "$price1"."0"; //to avoid prices like 17.5 - write 17.50 instead

$price2 = _formatPrice( $price2 );
$price1 = _formatPrice( $price1 );
$pricez = $selected_currency_details[2] ?
$price2.$selected_currency_details[0] :
$selected_currency_details[0].$price2;
$pricez1 = $selected_currency_details2[2] ?
$price1.$selected_currency_details2[0] :
$selected_currency_details2[0].$price1;

return $pricez." / ".$pricez1;
}

источник


можно ли это решение сделать, только если клиент состоит оптовой группе покупателей, а для остальных чтоб цена была обычной? и при оформлении заказа оптовому покупателю показывалась цена в грн/долларе, к каждому товару и в сумме?(короче всюду) нужно это все потому-что в Украине запрещено торговать в валюте, но доллар нужен для удобства оптовых покупателей, а оплата в грн.

Или другой вариант, нужно добавить еще столбец в csv файл с оптовой ценой в $, и чтобы если покупатель оптовый он видел только оптовую цену в долларе?
  • 0

#19 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 16 May 2013 - 08:11 PM

Можно без всех этих изысков просто блок переключения валют показывать только оптовым покупателям :).
Штатно блок можно показывать либо всем, либо только админам. Я тут где-то публиковал простейшее дополнение, где блок можно показывать всем, либо админам, либо зарегистрированным пользователям. Никто не мешает аналогичным образом модифицировать код и добавить четвертый вариант - "показывать блок только членам групп". Или "только членам группы Опт". А там уж они пускай сами выбирают, в какой валюте смотреть прайс.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#20 hels

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 176 сообщений
Репутация: 3
Начинающий

Отправлено 17 May 2013 - 07:39 AM

не то написал, короче мне по любому нужно добавить еще столбец в csv файл с оптовой ценой в $, и чтобы если покупатель оптовый он видел только оптовую цену в долларе, потому-что для оптовиков у нас свои наценки на каждый товар по разному..
  • 0