Подсказка - конвертер валют. Как сделать?

melkozaur
На сайте с 06.04.2010
Offline
505
1977

На некоторых сайтах вижу вот что: в тексте пишется цена в местной валюте, а при наведении всплывает title уже в рублях. Пример.

Не знаю, как это сделано у всех, может и вручную просто в тексте прописывают :)

А есть какие-то готовые решения, от гугла например, которые позволяли бы как-то на лету конвертировать валюту и показывать пользователю в рублях (точнее, в валюте его страны) при наведении? Или еще как-то.

Серверы в NL/US со скидкой 30% нашим читателям: E5-2650v4/10GB DDR4/240GB SSD/1 Gbps - от $20: https://ua-hosting.company/vps/nl SEO без компромиссов: https://seoleaks.net SEOLEAKS - продвижение сайтов: https://www.instagram.com/seoleaks
S
На сайте с 13.10.2014
Offline
171
#1

я про такие не слышал, но в теории можно написать на js. или js+серверная часть.

TF-Studio
На сайте с 17.08.2010
Offline
334
#2

через JS видимо ищется текст (регулярка) и дописывается title.

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
_
На сайте с 24.03.2008
Offline
381
#3

Проблемы только с тем, где брать курс. Можно полагаю аяксом отдавать.

(уж откуда его брать на сервере дело 10е, хоть цбр парсить, хоть вручную, хоть еще что)

А уж дальше дописать JS что угодно в title не проблема.

edogs software
На сайте с 15.12.2005
Offline
775
#4
_SP_:
Проблемы только с тем, где брать курс. Можно полагаю аяксом отдавать.
(уж откуда его брать на сервере дело 10е, хоть цбр парсить, хоть вручную, хоть еще что)
А уж дальше дописать JS что угодно в title не проблема.

Неплохой вариант брать курс прямо у визы https://usa.visa.com/support/consumer/travel-support/exchange-rate-calculator.html

И валют больше чем у цбр и для оплаты картами точнее данные получаются.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
S
На сайте с 13.10.2014
Offline
171
#5

Почти написал. добью дома, запощу пример

Aisamiery
На сайте с 12.04.2015
Offline
293
#6

Какие сложные у вас решения, все куда проще. Есть базовая валюта и она равна 1, а есть остальные валюты списком, на выводе получается

price * base_currency

price * en_currency

price * de_currency и так далее.

Естественно раз в день обновлять валюту, можно чаще. умножить 2 числа, операция быстрая и не трудозатратная

Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
melkozaur
На сайте с 06.04.2010
Offline
505
#7

Не будет ли это все тормозить?

И да, кто-то может сказать, на Тонкостях - как сделано? Через js или они просто ручками это все делают? Сомневаюсь, что вручную, ведь это же придется часто все менять, курсы же не постоянны.

TF-Studio
На сайте с 17.08.2010
Offline
334
#8

посмотрите исходный код. там через js

раз в сутки через апи поулачаем курсе. храним в файле по простому

на js заменяем на автомате контент. главное формата придерживаться.

задача простейшая

ДП
На сайте с 23.11.2009
Offline
203
#9

Вот код, который там цены показывает.

Регулярками ищут в тексте цены и заворачивают их в спан с нужным тултипом.

var currencyJS    = {};
currencyJS['AMD'] = 482.445;
currencyJS['EUR'] = 0.886882;
currencyJS['RUB'] = 56.6699;
currencyJS['USD'] = 1;
jQtnk(function($){
var inp = ['AMD', 'USD', 'EUR'];
$('#mw-content-text *:not(.NoCurTips,.NoCurTips *,script,iframe,textarea)').contents().filter(function(){
return this.nodeType == 3;
}).each(function(ind, el){
var txt = $(el).text();
if(txt.length > 3) {
var rez1 = txt.match(new RegExp("([0-9]+[0-9,\. ]*[\-\–\— до]*[0-9,\. ]*(AMD|USD|EUR))", 'g'));
if(rez1) {
$.each(rez1, function(k, v){
for(var i = 0; i < inp.length; i++) {
var rep = '';
var rez = v.match(new RegExp("([0-9]+[0-9,\. ]*)[\-\–\— до]*([0-9,\. ]*)(" + inp + ")"));
if(rez) {
rez[1] = rez[1].replace(/ +/g, '');
rez[1] = rez[1].replace(',', '.');
rez[2] = rez[2].replace(/ +/g, '');
rez[2] = rez[2].replace(',', '.');
var v1 = Math.round(rez[1] / currencyJS[inp] * currencyJS['RUB']);
v1 = v1.toString();
var v2 = Math.round(rez[2] / currencyJS[inp] * currencyJS['RUB']);
v2 = v2.toString();
if(v1.length > 4) v1 = v1.replace(new RegExp("(\\d)(?=(\\d{3})+$)", 'g'), '$1 ');
if(v2.length > 4) v2 = v2.replace(new RegExp("(\\d})(?=(\\d{3})+$)", 'g'), '$1 ');
if(rez[2] > 0) rep = '<span class="CurTip" title="≈ ' + v1 + '—' + v2 + ' руб.">';else rep = '<span class="CurTip" title="≈ ' + v1 + ' руб.">';
txt = txt.replace(new RegExp("(^|[^0-9]{1})" + rez[0] + "(?!<)"), '$1' + rep + rez[0] + "</span>");
}
}
});
$(el).wrap("<span></span>");
$(el).parent().html(txt);
}
}
});
if(window.navigator.userAgent.toUpperCase().indexOf('MOBIL') > 0) {
var prevObj;
$('#mw-content-text').click(function(){
if(prevObj !== undefined) prevObj.remove();
return true;
});
$('.CurTip').click(function(){
if(prevObj !== undefined) prevObj.remove();
$(this).prepend('<di' + 'v>' + $(this).attr('title') + '</d' + 'iv>');
prevObj = $(this).find('div');
return false;
});
}
});

Я когда-то делал по такому же принципу конвертер.

S
На сайте с 13.10.2014
Offline
171
#10

несколько более сложный вариант, чем вышеприведенный

состоит из двух частей. серверной и клиентской.

Клиентская получает местоположение браузера - страну и запрашивает у серверной параметры валюты.

Та заходит на сайт ЦБРФ, забирает xmlку, парсит ее. перевариват и возвращает json с валютой, курсом к рублю, префиксом и суффиксом.

после чего JS-ка пробегает весь контент и меняет все элементы с классом .priceValue

живой пример http://pcalc.dep2.ru/

аврхив: http://pcalc.dep2.ru/pcalc.zip

Важно: Я не старался сделать код красивым. главное. чтоб он заработал

PHP filename getCurrecy.php

<?php

header('Content-Type: application/json');

/*
** Список стран для которых будет производиться преборазование
** поддерживаются варианты

#скопипастил из XML Поэтому с павдежов проблема

Австралийский доллар
Азербайджанский манат
Фунт стерлингов Соединенного королевства
Армянских драмов
Белорусский рубль
Болгарский лев
Бразильский реал
Венгерских форинтов
Гонконгских долларов
Датских крон
Доллар США
Евро
Индийских рупий
Казахстанских тенге
Канадский доллар
Киргизских сомов
Китайских юаней
Молдавских леев
Норвежских крон
Польский злотый
Румынский лей
СДР (специальные права заимствования)
Сингапурский доллар
Таджикских сомони
Турецкая лира
Новый туркменский манат
Узбекских сумов
Украинских гривен
Чешских крон
Шведских крон
Швейцарский франк
Южноафриканских рэндов
Вон Республики Корея
Японских иен
*/
$currency_by_country = array(
'Germany' => array('code' => 'EUR', 'prefix' => '', 'suffix' => '€'),
'Japan' => array('code' => 'JPY', 'prefix' => '円', 'suffix' => ''),
'Russia' => array('code' => 'RUB', 'prefix' => '', 'suffix' => '₽'),
'USA' => array('code' => 'USD', 'prefix' => '$', 'suffix' => ''),
);




/*
** величины экспорта по умолчанию
*/
$content = array(
'baseCountry' => 'Russia',
'baseCurrency' => 1,
'outputCurrency' => 1,
'code' => $currency_by_country['Russia']['code'],
'prefix' => $currency_by_country['Russia']['prefix'],
'suffix' => $currency_by_country['Russia']['suffix'],
'hasError' => 0,
'errorDescription' => ''

);


/*
** проверяем get запрс на наличие страны, если ее нет - выводим ошибку и дохнем
**
*/
if (!empty($_GET['country']))
{
$content['outputCountry'] = $_GET['country'];
}
else
{
$content['outputCountry'] = '';
$content['hasError'] = 1;
$content['errorDescription'] = 'Не указана страна';
print json_encode($content);
die();
}




/*
** загружаем XML с данным с сайта ЦБРФ
** todo: чтобы не зависитть от приватностей стороннего сайта надо будет сделать кэширование
*/
$currency = simplexml_load_file('http://www.cbr.ru/scripts/XML_daily.asp');



/*
** если заданая страна отсутствует в массиве выше - дохнем с описанием ошибки
*/
if (!array_key_exists($content['outputCountry'],$currency_by_country)){
$content['hasError'] = 1;
$content['errorDescription'] = 'страна не найдена в базе';
print json_encode($content);
die();
}


/*
** разбираем XML и формируем массив для конвертации в json
*/
foreach($currency->Valute as $item)
{
$vl = str_replace(',','.',$item->Value);

if (isset($currency_by_country[$content['baseCountry']]['code']) && $item->CharCode == $currency_by_country[$content['baseCountry']]['code'])
{
$content['baseCurrency'] = (string) $vl / $item->Nominal;
}

if (isset($currency_by_country[$content['outputCountry']]['code']) && $item->CharCode == $currency_by_country[$content['outputCountry']]['code'])
{
$content['outputCurrency'] = (string) $vl /$item->Nominal;
$content['code'] = $currency_by_country[$content['outputCountry']]['code'];
$content['prefix'] = $currency_by_country[$content['outputCountry']]['prefix'];
$content['suffix'] = $currency_by_country[$content['outputCountry']]['suffix'];
}
}

/*
** выводим данные клиенту
*/
print json_encode($content);

JS

<!-- load yandex.maps -->

<script src="https://api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=en" type="text/javascript"></script>

<script type="text/javascript">

// получаем нахождение клиента
function getUserAgentCoutry(){
var userLocation = ymaps.geolocation;
return userLocation.country ;
}

// берем актуальные курсы с сайта яху финанс
// без серверной части будет весьма и весьма геморно делать, поэтому воспользуемся простым php скриптиком
function setCurrecy(country){
$.ajax({
//url: 'getCurrecy.php?country='+country,
//<-- URL запроса в параметре country передается текущая страна.
url: 'getCurrecy.php?country=USA', // для теста

success: function(d)
{
if (d.hasError == 0){
var course = d.outputCurrency;
$('body .priceValue').each(function(index, element) {
var price = ($(element).html() / d.outputCurrency).toFixed(2);
var priceTXT = '~ ' + d.prefix + price + ' '+d.suffix ;
$(element).css('color','red').attr('title',priceTXT);
});

}
else
{
console.log (d.errorDescription);
}
}
});
}

$(document).ready(function(){
ymaps.ready(function(){
var country = getUserAgentCoutry();
setCurrecy(country);
});

});

</script>

пример HTML

<div>

В нашем бюро работают переводчики и редакторы с лингвистическим, техническим, медицинским, юридическим образованием, которые могут не только выполнить перевод соответствующей специализации, но и отредактировать текст всего за <span class="priceValue">500</span> рублей<br>
Редактирование текста подразумевает наличие исходного текста и готового перевода. Редактор проверяет грамотность перевода на адекватность, соответствие оригиналу и исправляет допущенные неточности и ошибки. за <span class="priceValue">3900</span> рублей
</div>

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий