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

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
<hr>
+
[[Категория:Верстка в TPL]][[Категория: Верстка в XSLT]][[Категория: Модуль Новости]]
<h2>Как при наличии полного текста новости ставить на нее ссылку, а при отсутствии - не ставить?</h2>
+
'''Актуально для версии 2.9.6'''<br/><br/>
 
+
'''Задача:''' Вывести ссылку на новость при условии, что поле "Контент" этой новости заполнено, или не выводить в ином случае.<br/><br/>
Чтобы реализовать условность в tpl, в шаблоне вывода новостей нужно использовать макрос % data getProperty(% id%, 'content', 'choice')%
+
'''Реализация:'''
 
+
<h2>TPL-шаблонизатор</h2>
В шаблоне ~/tpls/data/choice.tpl следует написать:
+
В шаблоне вывода отдельной новости ленты новостей добавим вызов макроса  %data getProperty()%:
<pre>
+
<source lang="html4strict">
 +
%data getProperty('%id%', 'content', 'choice')%
 +
</source>
 +
Создадим файл tpls\data\choice.tpl и добавим в него следующее содержимое:
 +
<source lang="html4strict">
 
<?php
 
<?php
 
$FORMS = Array();
 
$FORMS = Array();
FORMS['wysiwyg'] = <<<END
 
<a href="% data getProperty(% id%, 'link', 'template')%">
 
  
% data getProperty(% id%, 'h1', 'template')%</a>
+
$FORMS['wysiwyg'] = <<<END
 +
<a href="%content get_page_url(%id%)%">
 +
    %data getProperty(%id%, 'h1', 'default')%
 +
</a>
 
END;
 
END;
  
  
 
$FORMS['wysiwyg_empty'] = <<<END
 
$FORMS['wysiwyg_empty'] = <<<END
% data getProperty(% id%, 'h1', 'template')%
+
    %data getProperty(%id%, 'h1', 'default')%
 
END;
 
END;
?>  
+
?>
</pre>
+
</source>
+
 
 +
Так как, типом поля с идентификатором "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>
  
Таким образом, у вас в случае наличия текста в поле content будет отдаваться содержимое блока wysiwyg, а в случае отсутствия текста содержимое wysiwyg_empty.
+
С помощью условной конструкции <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> проверяется заполнено ли у новости поле "Контент" и если да, то выводится ссылка на эту новость или просто ее название, в ином случае.