2015 13 декабря

Динамический курс валюты на сайте

ourse

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

В файле \templates\шаблон\html\com_content\article\default.php добавляем строку (у меня много функций разных прикладных в этом файле лежат, можно и прямо в код вставлять)

1
include_once(JPATH_ROOT .'/templates/шаблон/pb_function.php');

Дальше в этом же файле в нужном месте обращаемся к функции курса, передавая туда ID текущего объекта (материала)

1
<?php echo course($this->item->id); ?>

сам файл pb_function.php должен содержать такой вот код

1
23
45
67
89
1011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
4647
4849
5051
5253
function course($id)
        {        $db = JFactory::getDBO();
        $sql = 'select p_price from #__content where id = "'.$id.'" ';        $db->setQuery($sql);
        $row = $db->loadRow();        $price = $row[0];
        // получаем данные о текущем курсе        jimport('joomla.filesystem.file');
        jimport('joomla.application.application');        /*
        Сохранить http://www.cbr.ru/scripts/XML_daily.asp локально с именем текущей даты. При загрузке проверить совпадение даты, если нет - прочитать с ЦБ заново, удалить старый, сохранить новый        */
        $dailyxml = date('dmY');        $dailyxml_url = JPATH_CACHE . DS . $dailyxml.'_daily.xml';
        if (JFile::exists($dailyxml_url)) {                // файл уже есть, значит парсим, функция
                $eur = dailyxml_parser($dailyxml_url, 'EUR');        } else {
                // файла нет, значит удалим файл за вчера, создадим и функция парсим            $dailyxml_url_old = JPATH_CACHE . DS . date('dmY', time()-86400).'_daily.xml';
                JFile::delete($dailyxml_url_old);                // новый файл
                $date = date('d/m/Y');                $link = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.$date;
                $fd = fopen($link, 'r');                    $dailyxml_text = '';
                    if (!$fd) {                        echo 'error page www.cbr.ru/scripts/XML_daily.asp';
                    } else {                        while (!feof ($fd)) $dailyxml_text .= fgets($fd, 4096);
                    }                    fclose ($fd);
                    // грабим текст в файл                    $dailyxml_url = JPATH_CACHE . DS . $dailyxml.'_daily.xml';
                    JFile::write($dailyxml_url, $dailyxml_text);                    // получаем курс
                $eur = dailyxml_parser($dailyxml_url, 'EUR');            }
            // считаем цену по курсу евро            $price = $price*$eur;
            $price = number_format($price, 0, '', '');            return $price;
        }function dailyxml_parser($url, $charcode)
        {        $file = simplexml_load_file($url);
        $valutes = array();                foreach ($file AS $el){
                    $valutes[strval($el->CharCode)] = strval($el->Value);                }
                return str_replace(',', '.', $valutes[$charcode]);        }

Нужная другая валюта - то при вызове функции dailyxml_parser указываем другой КОД, параметры валют можно посмотреть в файле \cache\дата.хмл, элемент хмл CharCode

Комментарии

Оставить коммент

Защитный код
Обновить