Вывод значений элементов или атрибутов (xslt) — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показана 1 промежуточная версия этого же участника)
Строка 1: Строка 1:
 +
'''Актуально для версии 19.'''
 +
 
'''Задача:''' Вывести значения атрибутов или элементов в шаблоне (это могут быть значения любых полей нашей страницы).
 
'''Задача:''' Вывести значения атрибутов или элементов в шаблоне (это могут быть значения любых полей нашей страницы).
  
Строка 6: Строка 8:
 
UMI.CMS предоставляет возможность просмотреть содержимое любой существующей страницы в системе в виде XML непосредственно в окне браузера.
 
UMI.CMS предоставляет возможность просмотреть содержимое любой существующей страницы в системе в виде XML непосредственно в окне браузера.
 
Для того, чтобы вывести страницу в виде XML следует набрать в адресной строке httр://адрес_сайта/upage/id_страницы.
 
Для того, чтобы вывести страницу в виде XML следует набрать в адресной строке httр://адрес_сайта/upage/id_страницы.
 
 
  
 
2. Итак мы хотим вывести следующее:
 
2. Итак мы хотим вывести следующее:
Строка 14: Строка 15:
  
 
В xsl шаблоне дизайна для вывода у нас соответственно будут записи вида:
 
В xsl шаблоне дизайна для вывода у нас соответственно будут записи вида:
<source lang="java">  <xsl:value-of select="/result/@title">
+
<source lang="xml">  <xsl:value-of select="/result/@title" />
   <xsl:value-of select="/result/@header">
+
   <xsl:value-of select="/result/@header" />
   <xsl:value-of select="/result/page/properties/group/property[@name='content']/value">
+
   <xsl:value-of select="/result/page/properties/group/property[@name='content']/value" />
 
                          
 
                          
 
</source>
 
</source>
  
 
3. Теперь на страницах сайта будут выводиться нужные нам значения. Для того, чтобы содержимое поля "контент" выводилось без экранирования тэгов, необходимо добавить еще один атрибут, записав инструкцию так:
 
3. Теперь на страницах сайта будут выводиться нужные нам значения. Для того, чтобы содержимое поля "контент" выводилось без экранирования тэгов, необходимо добавить еще один атрибут, записав инструкцию так:
<source lang="java"><xsl:value-of select="/result/page/properties/group/property[@name='content']/value" disable-output-escaping="yes">
+
<source lang="xml"><xsl:value-of select="/result/page/properties/group/property[@name='content']/value" disable-output-escaping="yes" />
 
                          
 
                          
 
</source>
 
</source>
Строка 27: Строка 28:
 
4. Фигурные скобки в атрибутах: {}
 
4. Фигурные скобки в атрибутах: {}
 
Часто может возникнуть необходимость вывести какие-либо значения внутри атрибута тега, например:
 
Часто может возникнуть необходимость вывести какие-либо значения внутри атрибута тега, например:
<source lang="java"><meta name="description" content="/">
+
<source lang="xml"><meta name="description" content="/">
 
<meta name="keywords" content="/"></source>
 
<meta name="keywords" content="/"></source>
 
В таком случае необходимо воспользоваться записью через фигурные скобки, указав таким же образом путь до элемента:
 
В таком случае необходимо воспользоваться записью через фигурные скобки, указав таким же образом путь до элемента:
<source lang="java"><meta name="description" content="{result/meta/description}">
+
<source lang="xml"><meta name="description" content="{result/meta/description}" />
<meta name="keywords" content="{result/meta/keywords}"></source>
+
<meta name="keywords" content="{result/meta/keywords}" /></source>
 +
 
 +
5. '''Обратите внимание''' на то, что все непарные элементы в xsl необходимо закрывать слешем <source lang="java"><xsl:value-of select="$page" /></source>
 +
У парных необходимо ставить слеш в начале второго элемента, например:
 +
<source lang="xml">
 +
<xsl:if test="$test">
 +
  <xsl:value of select="$var" />
 +
</xsl:if>  
 +
</source>
  
 
[[Категория:Верстка в XSLT]]
 
[[Категория:Верстка в XSLT]]

Текущая версия на 06:16, 19 ноября 2018

Актуально для версии 19.

Задача: Вывести значения атрибутов или элементов в шаблоне (это могут быть значения любых полей нашей страницы).

Решение: познакомимся с инструкцией XSLT <xsl:value-of>.

1. Вывод значений элементов или атрибутов в шаблоне осуществляется при помощи инструкции <xsl:value-of select="путь_до_элемента">. UMI.CMS предоставляет возможность просмотреть содержимое любой существующей страницы в системе в виде XML непосредственно в окне браузера. Для того, чтобы вывести страницу в виде XML следует набрать в адресной строке httр://адрес_сайта/upage/id_страницы.

2. Итак мы хотим вывести следующее: title страницы - получить его можно указав /result/@title ; заголовок страницы - получить его можно, указав /result/@header ; контент - получить его можно, указав /result/page/properties/group/property[@name='content']/value

В xsl шаблоне дизайна для вывода у нас соответственно будут записи вида:

   <xsl:value-of select="/result/@title" />
   <xsl:value-of select="/result/@header" />
   <xsl:value-of select="/result/page/properties/group/property[@name='content']/value" />

3. Теперь на страницах сайта будут выводиться нужные нам значения. Для того, чтобы содержимое поля "контент" выводилось без экранирования тэгов, необходимо добавить еще один атрибут, записав инструкцию так:

<xsl:value-of select="/result/page/properties/group/property[@name='content']/value" disable-output-escaping="yes" />

4. Фигурные скобки в атрибутах: {} Часто может возникнуть необходимость вывести какие-либо значения внутри атрибута тега, например:

<meta name="description" content="/">
<meta name="keywords" content="/">

В таком случае необходимо воспользоваться записью через фигурные скобки, указав таким же образом путь до элемента:

<meta name="description" content="{result/meta/description}" />
<meta name="keywords" content="{result/meta/keywords}" />

5. Обратите внимание на то, что все непарные элементы в xsl необходимо закрывать слешем

<xsl:value-of select="$page" />

У парных необходимо ставить слеш в начале второго элемента, например:

<xsl:if test="$test">
  <xsl:value of select="$var" />
</xsl:if>