Ссылка на новость при наличии ее контента

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 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> проверяется заполнено ли у новости поле "Контент" и если да, то выводится ссылка на эту новость или просто ее название, в ином случае.