Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #391 (permalink)  
Старый 21.02.2018, 13:54
Профессор
Отправить личное сообщение для spinastr Посмотреть профиль Найти все сообщения от spinastr
 
Регистрация: 02.05.2016
Сообщений: 390

Как в этом скрипте Евро вывести?
Ответить с цитированием
  #392 (permalink)  
Старый 21.02.2018, 15:49
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Заменить current.json этим

{"date":"22.2.2018","rate":{"USD":{"value":56.6537 ,"dyn":2},"EUR":{"value":69.8087,"dyn":1}}}

Код current.php заменить этим:

<?
libxml_use_internal_errors();
if($xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_daily.asp?date_req='.date('d/m/Y', strtotime('+1 day')))) { 

    $date = strtotime($xml->attributes()->Date);    
    $currency = json_decode(file_get_contents('current.json'));
        
    if($date > strtotime($currency->date)) {
        
        foreach ($xml->children() as $child) { //обход полученных курсов
            if($child->NumCode==840 || $child->NumCode==978) $rate[$child->CharCode->__toString()] = (float)str_replace(',', '.', $child->Value); 
            if(count($rate)==2) break;
        }
    
        if($rate) {
        
            $currency->date = date('j.n.Y', $date);
            
            foreach($currency->rate as $k => &$v) {
                $v->dyn = ($n = $rate[$k] - $v->value) < 0 ? 1 : ($n ? 2 : 0);
                $v->value = $rate[$k];  
            }
            
            $dir = dirname(__FILE__);
            chdir($dir);
            chmod($dir, 0777);

            file_put_contents('current.json',json_encode($currency));

            chmod($dir, 0700);
        }
    }
}
?>


JS код вывода курса на страницу тоже надо изменить. Какой код, включая и html-верстку элементов под курсы используется?
Ответить с цитированием
  #393 (permalink)  
Старый 21.02.2018, 16:10
Профессор
Отправить личное сообщение для spinastr Посмотреть профиль Найти все сообщения от spinastr
 
Регистрация: 02.05.2016
Сообщений: 390

laimas,

Спасибо,

это коды валют?

if($child->NumCode==840 || $child->NumCode==978)


Как можно вывести. Точно также как сейчас есть, то есть курс на сегодня и завтра доллара и добавить курс на сегодня и завтра ЕВРО?
Ответить с цитированием
  #394 (permalink)  
Старый 21.02.2018, 16:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Нет в данном коде никаких курсов на сегодня и завтра, есть текущий курс доллара и евро.

Спрашивается - какой код на клиенте ля вывода валюты, включая html верстку?

Вот что непонятного из этого?

Показывайте код клиентский, напишу изменения, а нет, так нет, долгие разговоры мне вести некогда.
Ответить с цитированием
  #395 (permalink)  
Старый 21.02.2018, 16:52
Профессор
Отправить личное сообщение для spinastr Посмотреть профиль Найти все сообщения от spinastr
 
Регистрация: 02.05.2016
Сообщений: 390

Сообщение от laimas
долгие разговоры мне вести некогда.
Извините что вас отвлекаю, я не спишу.

<html lang="ru">
    <head>
        <meta charset="utf-8" />
        <title>Документ без названия</title>
        <script type="text/javascript" src="http://forum.ucoz.ru/.s/src/jquery-1.7.2.js"></script>
    </head>
    <body>
<style>
.up {color: #0f0; /*зеленый цвет*/}
.down {color: #f00;}
</style>

<table style="width:50%;font-family: Verdana, Arial, Helvetica, sans-serif;">
     <tbody>
      <tr>
       <td style="font-size: 3vw; color: #8c8c8c;"><span class="usddata2"></span></td>
       <td style="font-size: 3vw; color: #8c8c8c;"><span class="usddata"></span></td>
      </tr>
      <tr>
       <td style="font-size: 4vw; color: #333333;"><span class="previous"></span></td>
       <td style="font-size: 4vw; color: #333333;"><span class="current"></span></td>
      </tr>
     </tbody>
    </table>


<script> 
//именно такое и получит Ajax 
$.getJSON("http://h116641.s08.test-hf.su/", function(data) { 
$('.usddata').html(data.current.date);
$('.usddata2').html(data.previous.date);
//и вот тут данные этого объекта помещаются на свои места 
$.each(data, function(k, o) { 
$('.'+k).html("$ " + o.value + ' <b class=' + ['','down','up'][o.rate] +'>' + ['','▼','▲'][o.rate] +'</b>').attr("title", o.date) 
}) 
}); 
</script>

    </body>
</html>




Визуально это выглядит так:

https://pp.userapi.com/c841127/v8411...McDyFLQydg.jpg

Последний раз редактировалось spinastr, 22.02.2018 в 19:14.
Ответить с цитированием
  #396 (permalink)  
Старый 21.02.2018, 17:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А надо курсы также текущий день (или новый курс) и предыдущий, но доллара и евро?
Ответить с цитированием
  #397 (permalink)  
Старый 21.02.2018, 17:24
Профессор
Отправить личное сообщение для spinastr Посмотреть профиль Найти все сообщения от spinastr
 
Регистрация: 02.05.2016
Сообщений: 390

Сообщение от laimas
А надо курсы также текущий день (или новый курс) и предыдущий, но доллара и евро?
Курсы Евро и Доллара текущий и на следующий день.
Ответить с цитированием
  #398 (permalink)  
Старый 21.02.2018, 17:57
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Тогда current.json заменить этим

{"current":{"date":"22.2.2018","USD":{"value":56.6 537,"rate":2},"EUR":{"value":69.8087,"rate":1}},"p revious":{"date":"21.2.2018","USD":{"value":56.520 1,"rate":2},"EUR":{"value":69.8928,"rate":1}}}

Код current.php заменить этим

<?
libxml_use_internal_errors();

if($xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_daily.asp?date_req='.date('d/m/Y', strtotime('+1 day')))) {

    $date = strtotime($xml->attributes()->Date);
    
    $currency = json_decode(file_get_contents('current.json'), 1);
        
    if($date > strtotime($currency['current']['date'])) {
        
        foreach ($xml->children() as $child) {
            if($child->NumCode==840 || $child->NumCode==978) $rate[$child->CharCode->__toString()] = (float)str_replace(',', '.', $child->Value);
            if(count($rate)==2) break;
        }
    
        if($rate) {
        
            $currency['previous'] = $currency['current'];
            
            $currency['current']['date'] = date('j.n.Y', $date);
            
            foreach($currency['current'] as $k => &$v) {
                if($k=='date') continue;
                $v['rate'] = ($n = $rate[$k] - $v['value']) < 0 ? 1 : ($n ? 2 : 0);
                $v['value'] = $rate[$k];  
            }
    
            $dir = dirname(__FILE__);
            chdir($dir);
            chmod($dir, 0777);
            
            file_put_contents('current.json',json_encode($currency));
            
            chmod($dir, 0700);
        }
    }
}
?>


HTML/JS

<table>
    <tr>
        <td><span class="previous date"></span></td>
        <td><span class="current date"></span></td>
    </tr>
    <tr>
        <td><span class="previous USD"></span></td>
        <td><span class="current USD"></span></td>
    </tr>
    <tr>
        <td><span class="previous EUR"></span></td>
        <td><span class="current EUR"></span></td>
    </tr>
</table>

<script>
//именно такое и получит Ajax
$.getJSON("http://h116641.s08.test-hf.su/", function(data) {
    $.each(data, function(k, o) {
        $.each(o, function(a, r) {
            $('.'+k+'.'+a).html(
                a=='date' ? r : {'USD':'$','EUR':'€'}[a] + ' ' + r.value.toFixed(2) + ' <b class=' + ['','down','up'][r.rate] +'>' + ['','▼','▲'][r.rate] +'</b>'
            )
        })
    }) 
});
</script>


Стили надо в css описывать, а не забивать ими таблицу. Не надо выдумывать usddata2, usddata3, ... Элемент, в который нужно поместить информацию ему принадлежащую, находится по составному имени класса, которые равны ключам json. Для дат это previous.date, current.date, а для курса соответственно USD или EUR вместо date. И пусть элементов с таким классом будет куча на странице, во все будет помещено.

.attr("title", o.date) удалено, смысла нет, если даты в заголовках указаны.
Ответить с цитированием
  #399 (permalink)  
Старый 21.02.2018, 18:32
Профессор
Отправить личное сообщение для spinastr Посмотреть профиль Найти все сообщения от spinastr
 
Регистрация: 02.05.2016
Сообщений: 390

Сообщение от laimas
.attr("title", o.date)
У меня на сайте выводится в панели курс доллара, при клике на него открывается страница с полным курсом. Но в панели при наведении аысвечивается дата курса, она нужна что бы смотреть, дату.
Ответить с цитированием
  #400 (permalink)  
Старый 21.02.2018, 18:35
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

В какой панели, если в коде показана таблица с явным указанием дат?

Что кто-то будет догадываться как обратиться к неизвестной панели? Нет конечно.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод контента в модалном окне, чтобы к нему можно было обратиться по ссылке decadent42 jQuery 3 11.04.2016 15:12
Преключатель валют alexmixaylov jQuery 7 21.10.2014 13:10
Проблема с выводом курса валют bubanay Элементы интерфейса 0 20.12.2013 20:42
Вывод переменных MasterHrust Javascript под браузер 4 03.08.2011 15:41
Вывод данных в Друпал 6 из MySQL, небольшая работа torquemada Работа 1 22.05.2011 17:05