Ссылка на новость при наличии ее контента — различия между версиями
Stexe (обсуждение | вклад) |
Stexe (обсуждение | вклад) |
||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | [[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Модуль Новости]] | ||
+ | '''Актуально для версии 2.9.6'''<br/><br/> | ||
'''Задача:''' Вывести ссылку на новость при условии, что поле "Контент" этой новости заполнено, или не выводить в ином случае.<br/><br/> | '''Задача:''' Вывести ссылку на новость при условии, что поле "Контент" этой новости заполнено, или не выводить в ином случае.<br/><br/> | ||
'''Реализация:''' | '''Реализация:''' | ||
<h2>TPL-шаблонизатор</h2> | <h2>TPL-шаблонизатор</h2> | ||
− | В шаблоне вывода отдельной новости добавим вызов макроса %data getProperty()%: | + | В шаблоне вывода отдельной новости ленты новостей добавим вызов макроса %data getProperty()%: |
<source lang="html4strict"> | <source lang="html4strict"> | ||
%data getProperty('%id%', 'content', 'choice')% | %data getProperty('%id%', 'content', 'choice')% | ||
Строка 24: | Строка 26: | ||
</source> | </source> | ||
− | Так как, типом поля с идентификатором "content" является HTML Текст ("wysiwyg"), то при наличии содержимого в этом поле будет обработан блок ''''wysiwyg'''', в ином случае блок ''''wysiwyg_empty''''. В данном примере выводится ссылка на новость, если в поле с идентификатором "content" есть данные, | + | Так как, типом поля с идентификатором "content" является HTML Текст ("wysiwyg"), то при наличии содержимого в этом поле будет обработан блок ''''wysiwyg'''', в ином случае блок ''''wysiwyg_empty''''. В данном примере выводится ссылка на новость, если в поле с идентификатором "content" есть данные, в ином случае, значение поля "h1". |
+ | <h2>XSLT-шаблонизатор</h2> | ||
+ | В шаблоне вывода отдельной новости ленты новостей добавим следующий код: | ||
+ | <source lang="xml"> | ||
+ | <xsl:variable name="news_item" select="document(concat('upage://', @id))/udata"/> | ||
+ | <xsl:choose> | ||
+ | <xsl:when test="$news_item//property[@name='content']"> | ||
+ | <a href="{@link}" umi:field-name="name" umi:delete="delete" umi:empty="&empty-page-name;"> | ||
+ | <xsl:value-of select="node()" /> | ||
+ | </a> | ||
+ | </xsl:when> | ||
+ | <xsl:otherwise> | ||
+ | <xsl:value-of select="node()" /> | ||
+ | </xsl:otherwise> | ||
+ | </xsl:choose> | ||
+ | </source> | ||
+ | |||
+ | С помощью условной конструкции <xsl:choose> проверяется заполнено ли у новости поле "Контент" и если да, то выводится ссылка на эту новость или просто ее название, в ином случае. |
Текущая версия на 13:24, 10 апреля 2014
Актуально для версии 2.9.6
Задача: Вывести ссылку на новость при условии, что поле "Контент" этой новости заполнено, или не выводить в ином случае.
Реализация:
TPL-шаблонизатор
В шаблоне вывода отдельной новости ленты новостей добавим вызов макроса %data getProperty()%:
%data getProperty('%id%', 'content', 'choice')%
Создадим файл tpls\data\choice.tpl и добавим в него следующее содержимое:
<?php
$FORMS = Array();
$FORMS['wysiwyg'] = <<<END
<a href="%content get_page_url(%id%)%">
%data getProperty(%id%, 'h1', 'default')%
</a>
END;
$FORMS['wysiwyg_empty'] = <<<END
%data getProperty(%id%, 'h1', 'default')%
END;
?>
Так как, типом поля с идентификатором "content" является HTML Текст ("wysiwyg"), то при наличии содержимого в этом поле будет обработан блок 'wysiwyg', в ином случае блок 'wysiwyg_empty'. В данном примере выводится ссылка на новость, если в поле с идентификатором "content" есть данные, в ином случае, значение поля "h1".
XSLT-шаблонизатор
В шаблоне вывода отдельной новости ленты новостей добавим следующий код:
<xsl:variable name="news_item" select="document(concat('upage://', @id))/udata"/>
<xsl:choose>
<xsl:when test="$news_item//property[@name='content']">
<a href="{@link}" umi:field-name="name" umi:delete="delete" umi:empty="&empty-page-name;">
<xsl:value-of select="node()" />
</a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="node()" />
</xsl:otherwise>
</xsl:choose>
С помощью условной конструкции <xsl:choose> проверяется заполнено ли у новости поле "Контент" и если да, то выводится ссылка на эту новость или просто ее название, в ином случае.