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" />

И вот наш готовый результат.

Курсы валют:

на - 19.08.2017

USD - 59,3612

EUR - 69,7197

13.11.2012