Ссылка на новость при наличии ее контента — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 2: Строка 2:
 
'''Реализация:'''  
 
'''Реализация:'''  
 
<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')%
Строка 25: Строка 25:
  
 
Так как, типом поля с идентификатором "content" является HTML Текст ("wysiwyg"), то при наличии содержимого в этом поле будет обработан блок ''''wysiwyg'''', в ином случае блок ''''wysiwyg_empty''''. В данном примере выводится ссылка на новость, если в поле с идентификатором "content" есть данные, или поле "h1" в ином случае.
 
Так как, типом поля с идентификатором "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:06, 10 апреля 2014

Задача: Вывести ссылку на новость при условии, что поле "Контент" этой новости заполнено, или не выводить в ином случае.

Реализация:

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