Модуль "Курсы валют" для Drupal 6

Submitted by Ромка on Ср, 24/12/2008 - 17:31

Ромка аватар

В одном из последних проектов необходимо было вывести в блоке курсы валют. Кроме страшных информеров от РБК никакого полезного контента на эту тему я найти не сумел, по этому разработал модуль для шестого Друпала, который тянет курсы рубля по отношению к другим валютам из xml-файла с сайта ЦБРФ и выводит их в виде блока.

Полученные данные кешируются, настройки кеша, а также частота обновлений и список валют, которые необходимо выводить в блоке задаются через специальный интерфейс в админке. Внешний вид блока может быть переопределен через функцию темизации. Выводиться могут курсы следующих валют: Австралийский доллар, Фунт стерлингов Соединенного королевства, Белорусский рубль, Датская крона, Доллар США, Евро, Исландская крона, Казахское тенге, Канадский доллар, Китайский юань Жэньминьби, Норвежская крона, СДР (специальные права заимствования), Сингапурский доллар, Новая турецкая лира, Украинская гривна, Шведская крона, Швейцарский франк, Японская иена.

Демонстрацию работы модуля можно увидеть на этой странице в правом нижнем углу.

Внимание. С 11.01.2009 доступна новая версия модуля.

ВложениеРазмер
Package icon currencies.zip5.05 KB

38 Comments

Ромка аватар

Выкладываю новую версию модуля "Курсы валют"

Выкладываю новую версию модуля. Теперь он не просто выводит текущий курс, а также показывает изменения относительно предыдущего дня. Кроме того на по адресу exchange-rate на основе Google Chart строится график изменения курсов.

Для корректной работы модуля файл cron.php должен запускаться не реже раза в сутки. Картинку с графиками модуль пытается закешировать (при помощи CURL), если сделать этого не удается, то при каждом показе графика будет отсылаться запрос к Google Chart, таких запросов должно быть не более 50 000 в сутки.

Ромка, включаю модуль

Ромка, включаю модуль возникает ошибка при включении блока сайт не доступен, ошибка Fatal error: Call to undefined function curl_init() in Z:\home\final\WWW\sites\all\modules\currencies\currencies.module on line 73

Ромка аватар

PHP должен поддерживать работу с CURL

PHP должен поддерживать работу с CURL. Если в качестве веб-сервера используется Апач + винда, то в php.ini надо раскомментировать строчку "extension=php_curl.dll", если веб-сервер работает на *никс-системе, то пхп надо пересобрать с поддержкой CURL, подробности тут: http://ru.php.net/manual/ru/curl.installation.php.

Тонна благодарности )

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

Похожий модуль

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

Поискал, нашёл - Currency

Забирает данные с Yahoo! Finance, даёт api для обмена валют.

Думаю лучше было бы объединить два модуля, обогатив его тем, чего нет у другого :)

А можно сделать такое-же с погодой ?

Модуль ОТЛИЧНЫЙ !!! блин !!!, яркий пример КАК НАДО писать модули, хотлось-бы еще что-то подобное чтоб выдергивал из XML погоду например http://informer.gismeteo.ru/xml/30823_1.xml
если возможно отпишись, можно на аську 92_ноль_ноль_68

Модуль

Модуль погоды
http://vitalynoskov.spaces.live.com/blog/cns!59323A5F2F6F65CC!1534.entry

проблемы

Добрый день.
Очень интересны модуль, но опять таки возникли проблемы.
Тестирую на не рабочем сайте (под денвером апач+винда)
после установки вылезла уазаная проблема, разкоментил строчку, все хорошо. Включил блок и опять та же ошибка. Подскажите как решить?
И если не сложно, то решился ли вопрос с модулем погоды?
Большая просьба ответить, по возможности продублировать на почту..

Ромка аватар

после установки вылезла

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

Указанная где проблема?

Пишет: Fatal error: Call to

Пишет:

Fatal error: Call to undefined function curl_init() in Z:\home\yogan.ru\www\modules\currencies\currencies.module on line 73

Тоесть при первой установке модуля выскочила такая же надпись, раскомментировал строчку "extension=php_curl.dll" в php.ini в файлах вирутального сервера, проблама ушла.
Как только в "блоках" включаю блок и жму сохранить вылетает выше описаная ошибка.

Все еще глухо

Если имеется ввиду файл phpinfo.php, то там ничего похожего нету:
**********************************************************
<?php
/* $Id$ */
// vim: expandtab sw=4 ts=4 sts=4:

/**
* Gets core libraries and defines some variables
*/
require_once('./libraries/grab_globals.lib.php');
require_once('./libraries/common.lib.php');

/**
* Displays PHP information
*/
$is_superuser = @PMA_DBI_try_query('USE mysql', $userlink);
if ($is_superuser || $cfg['ShowPhpInfo']) {
phpinfo();
}
?>
******************************************************************

Возможно я совсем ничего не понимаю.
Объясните пожалуйста пошагово, как для полного идиота, так как я действительно в этих вопросах очень туго соображаю.

Ромка аватар

Разместите в корне вашего

Разместите в корне вашего сайта файл с именем phpinfo.php и таким содержимым:

<?php
phpinfo();
?>

затем перейдите на страницу вашсайт.ру/phpinfo.php, там будет выведена страница с настройками PHP, среди них должен быть блок с настройками curl. Если его нет, то значит расширение не включено. Включите его и модуль заработает.

посыпаю голову пеплом

Спасибо за развернуты ответ, но видимо я активно не могу ничего сообразить.

Сделал, как было описано, но:

Блок с настройками не появился, а как включить расширение я не понял.
Возможно и в первый раз разкоментировал не правильно.

Объясните пожалуйста где чего включать и как надо правильно в php.ini разкоментировать строчку

Ромка аватар

В phpinfo посмотрите где

  1. В phpinfo посмотрите где лежит используемый php.ini (часто в системе может лежать несколько этих файлов).
  2. В php.ini должна быть переменная extension_dir, в ней прописан путь, по которому PHP ищет расширения.
  3. Раскомментируйте строчку extension=php_curl.dll (надо удалить точку с запятой перед этой строкой)
  4. Убедитесь что в папке extension_dir лежит файл php_curl.dll
  5. Перезапустите Апач
  6. Еще документация тут

вопрос

Привет. Во-первых, спасибо за модуль. Полезный.

Теперь бы разобраться, как оно работает? ) Т.е. я его установил, оставил в настройках "USD,EUR" (без кавычек), поставил дефолтный адрес адрес xml-файла... ошибки на странице с png пропали после рефреша, как и было обещано. А вот блок так и не появился. Т.е. ни ошибок, ничего.

Ему нужно время, чтобы данные появились? Или может быть у меня cron не отрабатывает? (хотя для верности, запустил его пару раз вручную).

Буду благодарен за комментарий.

P.S. phpinfo()

P.S.
phpinfo() показывает:
curlCURL support enabled
CURL Information libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5

сорри, немного внимания мне

сорри, немного внимания мне бы не помешало. видимо параметр "Частота обновления данных (в секундах):" отвечает за это? спустя час появились валюты. работает.
т.е. я так понимаю, ему нужно сделать два запроса, чтобы данные о различии появились?

еще раз спасибо за прекрасный модуль.

Прошу прощения, но есть еще

Прошу прощения, но есть еще один вопрос: я плохо разбираюсь в модульной структуре друпала... есть ли какая-то возможность темизации? Т.е. можно ли например сделать name - заголовком для span, а саму валюту именовать так же, как в модуле - сокращениями?

Ромка аватар

Нет, ждать не нужно

[quote=slider]А вот блок так и не появился. Т.е. ни ошибок, ничего.

Ему нужно время, чтобы данные появились? Или может быть у меня cron не отрабатывает? (хотя для верности, запустил его пару раз вручную). [/quote]
Вообще нет, не нужно ждать. Модуль сначала ищет данные в кеше и если не находит их, то отправляет запрос к серверу ЦБ. Вы включили блок на странице администрирования блоков?

[quote=slider]Прошу прощения, но есть еще один вопрос: я плохо разбираюсь в модульной структуре друпала... есть ли какая-то возможность темизации? Т.е. можно ли например сделать name - заголовком для span, а саму валюту именовать так же, как в модуле - сокращениями?[/quote]
Есть, там есть функция темизации, начинающаяся с theme_, надо ее скопировать в файл template.php, который находится в папке с используемой в данный момент если файла нет, то его надо создать), заменть theme на имя_темы_оформления и сбросить theme registry cache, для этого нужно зайти на страницу со списком тем.

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

Ромка аватар

Выложил обновленную версию

Выложил обновленную версию модуля. В ней изменение внешнего вида блока вынесено в отдельный файл-шаблон cur-block.tpl.php, теперь не нужно вносить изменения в template.php, а достаточно изменить этот шаблон, предварительно скопировав из папки с модулем в папку с текущей темой.

Спасибо! Буду пробовать. С

Спасибо! Буду пробовать. С остальным вроде разобрался.
Есть один... недосмотр, я так думаю. Если отношение валюты к рублю больше полтинника, кривая в exchange-rate становится "прямой" )

нашел еще баг

Если "вчера" не было обновления курсов, блок может оказаться пустым. Видно по выходным и праздникам, когда нет обновления курсов.

Подскажите, если я установлю

Подскажите, если я установлю себе "currencies.zip" то такой график у меня также будет строится? Или для этого нужно чтото дополнительно устанавливать?

Fatal error

при активации модуля (при установке). выдает ошибку

  1. Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /home/vhosts/komandor.md/public_html/_sub/test/sites/all/modules/currencies/currencies.module:84 Stack trace: #0 /home/vhosts/komandor.md/public_html/_sub/test/sites/all/modules/currencies/currencies.module(84): SimpleXMLElement->__construct('') #1 /home/vhosts/komandor.md/public_html/_sub/test/sites/all/modules/currencies/currencies.module(115): getDataFromCbrf() #2 /home/vhosts/komandor.md/public_html/_sub/test/sites/all/modules/currencies/currencies.install(18): currencies_contents('26', '11', '2009') #3 /home/vhosts/komandor.md/public_html/_sub/test/includes/module.inc(450): currencies_enable(true) #4 /home/vhosts/komandor.md/public_html/_sub/test/includes/module.inc(306): module_invoke() #5 /home/vhosts/komandor.md/public_html/_sub/test/modules/system/system.admin.inc(917): module_enable() #6 /home/vhosts/komandor.md/public_html/_sub/test/includes/form.inc(769): system_modules_submit('currencies_enab...', Array) #7 /home/v in /home/vhosts/komandor.md/public_html/_sub/test/sites/all/modules/currencies/currencies.module on line 84

Темизация

копирую файл cur-block.tpl.php в свою тему, а друпал его не видит, все делает по шаблону который находится в директории модуля каренси. И к тому же после копирования в модуле Девел возникает куча ошибок... хоть убей...

Fatal error

С еррором разобрался, сори вина моя. Вся проблема была в хостинг провайдере. Я им написал, они попросили IP, я им дал IP центрабанка и они дали доступ к нему.

Модуль отличный,

Модуль отличный, спасибо!!!
Но, мне показалось, что разница в курсе как-то странно считается.
Где-то вроде ошибка, если смотреть по таблица, но где понять не могу.
Или это только у меня так?

Вот это действительно вещь!!!

Вот это действительно вещь!!! Весь интернет обошел чтобы курсы валют себе установить и вот наконецто...да еще и все толково расписано. Спасибо за модуль, Буду ставить

Раскоментировал строку

Раскоментировал строку extension=php_curl.dll" Все равно пишет ошибку
Fatal error: Call to undefined function curl_init() in W:\home\localhost\www\drupal\sites\all\modules\currencies\currencies.module on line 77

В чем дело?

Курс валют в копейках

Здравствуйте, Роман
Возможно ли подкорректировать код модуля, чтобы данные о стоимости валюты выглядели не
1 Доллар США — 30,7370
а
1 Доллар США — 30,73

то есть убрать тысячные и десятитысячные доли рубля оставив только копейки?

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

Не подскажите, каким образом

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