UMI.CMS. Внешние XML-данные: протокол UHttp
Итак, данные о текущих курсах валют в формате XML с сайта ЦБ можно получить по следующей ссылке http://cbr.ru/scripts/XML_daily.asp?. Отлично, осталось немного подшаманить, организовать шаблончик для отображения интересующих нас данных и всё будет готово. Данные у нас есть, в шаблоне, где будет предусмотренно дизайном нужно будет прописать такой вот небольшой вызов:
<xsl:apply-templates select="document('uhttp://cbr.ru/scripts/XML_daily.asp?)/ValCurs" />
Это так сказать непоследственно вызов шаблона который и будет отображать курсы валют.
Теперь давайте напишем сам шаблон. Выглядеть он будет следующим образом.
<xsl:template match="ValCurs"> <div> <span>Курсы валют:</span> <p class="date"><xsl:value-of select="@Date" /></p> <xsl:apply-templates select="Valute" /> </div> </xsl:template> <xsl:template match="Valute" /> <xsl:template match="Valute[@ID = 'R01235' or @ID='R01239']"> <p> <strong><xsl:value-of select="CharCode" /></strong> <xsl:text> - </xsl:text> <xsl:value-of select="Value" /> </p> </xsl:template>
ID = 'R01235' и ID='R01239, это курсы рубля к Доллару и Евро соответственно.
Всё отлично, всё замечательно и даже работает, но есть одна небольшая загвоздочка. А именно, где-то после обеда (примерно после 14:00 - 15:00) курс уже будет не на текущую дату, а на следующий день. Если кому это не важно, можно пользоваться и оставить все так как уже есть. Кому нужно чтоб и после обеда курс был на текущую дату читаем дальше.
Чтоб все было как мы хотим, нужно всего лишь при вызове шаблона по протоколу UHttp, передать после .asp? текущую дату в формате ДД.ММ.ГГ. Как мы это сделаем, да в общем то довольно просто. Итак, что мы делаем? Опишу способ которым воспользовался я. Опишем переменную в которую передадим с помощью функции php (особо не заморачиваясь, берем функцию date) текщую дату.
<xsl:variable name="today" select="php:function('date', 'd.m.Y')" />
И поместим мы её в какой-нибудь файл, где у нас находятся другие переменный. Я описал её в файле ~/templates/имя_шаблона/xslt/library/variables.xsl (у Вас может быть другой файл, всё зависит того, какой вариан шаблона будет выбран при установке UMI). Не забываем прописать вот такую штуку xmlns:php="http://php.net/xsl дополнительно внутри stylesheet, иначе вызов функции просто не сработает.
Итоговый вызов шаблона будет следующий:
<xsl:apply-templates select="document(concat('uhttp://cbr.ru/scripts/XML_daily.asp?date_req=', $today))/ValCurs" />
И вот наш готовый результат.
на - 09.10.2024
USD - 96,1079
EUR - 105,6891
13.11.2012