В composite c1 xslt функции являются очень удобный инструментом для выведении определенной информации
1. Добавление xslt функций
1. Для того, чтобы добавить новую функцию перейдите в раздел Функции и нажмите правой кнопкой мыши по папке XSLT функции (или по любой вложенной папке, в данном случае установлен Пакет News) рис.1.1.
Рис.1.1.добавление xslt функции
2. Автоматический появление новостей с помощью xslt функции
В данном разделе разбирается пример написания простой xslt функции
ВНИМАНИЕ! Необходимо установить пакет Composite.News в разделе Система для того, чтобы пример заработал
После того, как добавили новую функцию и установили пакет кликните по ней и перейдите во вкладку Шаблон и впишите данный код из листинга 2.1
Листинг 2.1.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:in="http://www.composite.net/ns/transformation/input/1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:n="http://c1.composite.net/News" xmlns:df="#dateExtensions" xmlns:lang="http://www.composite.net/ns/localization/1.0" xmlns:mp="#MarkupParserExtensions" exclude-result-prefixes="xsl in df n lang"> <xsl:param name="items" select="/in:inputs/in:result[@name='GetNewsItemXml']/*" /> <!-- items здесь обозначает все Новости добавленные на сайте --> <xsl:template match="/"> <html> <head></head> <body> <xsl:if test="count($items) > 0"> <!-- если на странице новостей отражено меньше чем указано (параметр Paze size в разделе "Вызовы функций" ), то вывести --> <xsl:apply-templates mode="NewsItem" select="$items" /> <!-- отобразить мод NewsItem из выбранной новости --> </xsl:if> </body> </html> </xsl:template> <xsl:template mode="NewsItem" match="*"> <!-- мод NewsItem --> <div> <p style="margin-left:145px;" class="textalignleft"> <!-- {n:GetPathInfo(@TitleUrl,@Date)} ф-я для получения url из входных параметров XML @TitleUrl и @Date --> <a href="~/page({@PageId.Id}){n:GetPathInfo(@TitleUrl,@Date)}"> <!-- ~/page() позволяет получить из параметра @PageId.Id ссылку страницы --> <xsl:value-of select="@Title" /> <!-- @Title это входное поле XML. Из входной информации XML ф-я XSLT обрабатывает её в HTML. --> </a> </p> <div style="clear:borh;" class="clear"></div> </div> </xsl:template> </xsl:stylesheet>
Сохраните шаблон и запустите данную функцию (добавьте ф-ю на любую страницу и посмотрите страницу с данной функцией в браузере), она не будет работает , т.к. не настроены Вызовы функций.
Для того чтобы вызывать стороннею ф-ю перейдите в раздел Вызовы функций нажмите Добавить и выберете функцию GetNewsItemXml (Composite→News→NewsItem→GetNewsItemXml) рис.2.1
Рис.2.1. Вызов функции
Внимательно изучите поля в функции GetNewsItemXml.
Selected fields - в данном поле настраивается входные параметры XML (которые вызываются в коде Шаблона @PageId.Id вызовет PageId.Id и т.д.) Т.е. в этом поле выбираете только те поля, которые вам необходимы! для выведения определенной информации.
<a href="~/page({@PageId.Id})"> <!-- параметр PageId.Id и т.д. -->
В нашем примеры необходимы - PageId.Id , Title , TitleUrl , Date
После того как выбраны необходимые параметры функция заработает на сайте.
Если поле Filter выбрано по умолчанию , то в данной функции будут показываться все новости со всех страниц.
Если необходимо отображение только с одной страницы новостей , а не со всех страниц , то для этого необходимо настроить фильтр:
1) Выберите для filter функцию FieldPredicatesFilter (Composite→News→NewsItem→FieldPredicatesFilter)
2) В поле PageId filter выберете функцию GuidEquals (Composite→Utils→Predicates→GuidEquals) рис.2.2
Рис.2.2. Добавление функции к Filter , которая проверяет по уникальному идентификатору страницы (если идентификатор равен определенному значению, то новость отобразится)
3) В значение функции GuidEquals вписывается идентификатор той страницы , с которой необходимы новости рис.2.2