Вывод последней новости из инфосистемы и списка остальных элементов

#
Вывод последней новости из инфосистемы и списка остальных элементов
Всем добра!
Камрады, беда. задача простая и тривиальная, но я сижу уже половину дня в поисках ответа.
Дано - инфосистема, в ней список новостей. У каждого элемента есть малая картинка и описание, внутри полный текст.
Надо вывести эти элементы в таком примерно порядке: сначала выводится последний элемент (с картинкой,  датой и описанием), потом выводятся все остальные элементы списком (картинка + дата + описание. При это стили для отображения последнего элемента и остальных разные, и последний элемент не должен выводиться на страницах с полным текстом прочих элементов.

Реализовал через ТДС, XSL шаблон использую следующий (для вывода списка элементов)

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:hostcms="http://www.hostcms.ru/"
   exclude-result-prefixes="hostcms">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <!-- СписокЭлементовИнфосистемы -->

   <xsl:template match="/">
      <xsl:apply-templates select="/informationsystem"/>
   </xsl:template>
   
   <xsl:template match="/informationsystem">
      <!-- Получаем ID родительской группы и записываем в переменную $group -->
      <xsl:variable name="group" select="group"/>
   <xsl:variable name="value1" select="informationsystem_item/id"/>
      <!-- Если в находимся корне - выводим название информационной системы -->
      <xsl:choose>
         <xsl:when test="$group = 0">            
            <div class="topblock" style="margin-top: -20px !important; left: 0px; position: relative !important; width: 100% !important; height: auto;">
               <div class="topblockbgtop" style="margin-top: 10px !important; margin-bottom: 20px !important; position: relative !important;"></div>
               <div class="topblockbgbottom"></div>
               <div class="mainNewsBlock">
               <!-- !!!вот тут должен выводиться последний элемент!!! -->
               </div>
            </div>
         </xsl:when>                  
      </xsl:choose>
      
      <!-- Отображение записи информационной системы -->
      <div class="content">
         <xsl:apply-templates select="informationsystem_item[active=1]"/>
      </div>
   </xsl:template>
   
   <!-- Шаблон вывода информационного элемента -->
   <xsl:template match="informationsystem_item">
      <div class="col33"><!-- выводит элементы в 3 колонки -->
         <a href="{url}" class="onenews" >
            <!-- Изображение для информационного элемента (если есть) -->
            <xsl:if test="image_small!=''">
               <span class="imgwrap">
                  <span class="img" style="background-image:url({dir}{image_small})"></span>
                  <span class="imganim"></span>
               </span>
            </xsl:if>
            <xsl:if test="description != ''">
               <span class="desc">
                  <xsl:value-of disable-output-escaping="yes" select="description"/>
               </span>
            </xsl:if>
            <span class="date">
               <xsl:value-of disable-output-escaping="yes" select="date"/>
            </span>
         </a>
      </div>
      
   </xsl:template>
</xsl:stylesheet>


вижу, что не хватает лишь вывода самого элемента, но как сделать - ума не приложу.
Спасибо!
Модератор
#
Re: Вывод последней новости из инфосистемы и списка остальных элементов
mrmixsun писал(а):
Надо вывести эти элементы в таком примерно порядке: сначала выводится последний элемент (с картинкой, датой и описанием), потом выводятся все остальные элементы списком (картинка + дата + описание.

Обычный вывод с сортировкой, вагон примеров в теме http://www.hostcms.ru/forums/2/7122/

mrmixsun писал(а):
вижу, что не хватает лишь вывода самого элемента

Где Вы это видите? в XSl-шаблоне вывод элемента у Вас есть!
Модератор
#
Re: Вывод последней новости из инфосистемы и списка остальных элементов

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:hostcms="http://www.hostcms.ru/"
   exclude-result-prefixes="hostcms">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <!-- СписокЭлементовИнфосистемы -->

   <xsl:template match="/">
      <xsl:apply-templates select="/informationsystem"/>
   </xsl:template>
   
   <xsl:template match="/informationsystem">
      <!-- Получаем ID родительской группы и записываем в переменную $group -->
      <xsl:variable name="group" select="group"/>
   <xsl:variable name="value1" select="informationsystem_item/id"/>
      <!-- Если в находимся корне - выводим название информационной системы -->
      <xsl:choose>
         <xsl:when test="$group = 0">            
            <div class="topblock" style="margin-top: -20px !important; left: 0px; position: relative !important; width: 100% !important; height: auto;">
               <div class="topblockbgtop" style="margin-top: 10px !important; margin-bottom: 20px !important; position: relative !important;"></div>
               <div class="topblockbgbottom"></div>
               <div class="mainNewsBlock">
               <!-- !!!вот тут должен выводиться последний элемент!!! -->
               <xsl:apply-templates select="informationsystem_item[active=1][position() = 1]"/>
               </div>
            </div>
         </xsl:when>                  
      </xsl:choose>
      
      <!-- Отображение записи информационной системы -->
      <div class="content">
         <xsl:apply-templates select="informationsystem_item[active=1][position() &gt; 1]"/>
      </div>
   </xsl:template>
   
   <!-- Шаблон вывода информационного элемента -->
   <xsl:template match="informationsystem_item">
      <div class="col33"><!-- выводит элементы в 3 колонки -->
         <a href="{url}" class="onenews" >
            <!-- Изображение для информационного элемента (если есть) -->
            <xsl:if test="image_small!=''">
               <span class="imgwrap">
                  <span class="img" style="background-image:url({dir}{image_small})"></span>
                  <span class="imganim"></span>
               </span>
            </xsl:if>
            <xsl:if test="description != ''">
               <span class="desc">
                  <xsl:value-of disable-output-escaping="yes" select="description"/>
               </span>
            </xsl:if>
            <span class="date">
               <xsl:value-of disable-output-escaping="yes" select="date"/>
            </span>
         </a>
      </div>
      
   </xsl:template>
</xsl:stylesheet>
#
Re: Вывод последней новости из инфосистемы и списка остальных элементов
Сорри за задержку. Спасибо большое, действительно все вывелось.
<xsl:apply-templates select="informationsystem_item[active=1][position() = 1]"/> - эта строчка решила
Только проблему не решило, я коряво описал видимо. Сейчас XSL шаблон выводит, грубо говоря, в два разных блока элементы ИС - последний в отдельный блок, все элементы - в отдельный блок. Проблема в том, что
<div class="mainNewsBlock">
<!-- !!!вот тут должен выводиться последний элемент!!! -->
<xsl:apply-templates select="informationsystem_item[active=1][position() = 1]"/>
</div>

вот сюда при таком раскладе выводится последняя новость, но шаблон для вывода такой же, как у остальных, хотя надо немного иной. Т.е., грубо говоря, нужен аналог вот такого вывода

Буду признателен за помощь. P.S. это все-таки не сортировка
#
Re: Вывод последней новости из инфосистемы и списка остальных элементов
Спасибо за участие, решил проблему сам, но благодаря вашей подсказке. Если кому-то пригодится - то вот решение:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:hostcms="http://www.hostcms.ru/"
   exclude-result-prefixes="hostcms">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <!-- СписокЭлементовИнфосистемы -->
   
   <xsl:template match="/">
      <xsl:apply-templates select="/informationsystem"/>
   </xsl:template>
   
   <xsl:template match="/informationsystem">
      <!-- Получаем ID родительской группы и записываем в переменную $group -->
      <xsl:variable name="group" select="group"/>
      <xsl:variable name="value1" select="informationsystem_item/id"/>
      <!-- Если в находимся корне - выводим название информационной системы -->
      <xsl:choose>
         <xsl:when test="$group = 0">
            <div class="topblock" style="margin-top: -20px !important; left: 0px; position: relative !important; width: 100% !important; height: auto;">
               <div class="topblockbgtop" style="margin-top: 10px !important; margin-bottom: 20px !important; position: relative !important;"></div>
               <div class="topblockbgbottom"></div>
               <div class="mainNewsBlock">
                  <!-- !!!вот тут должен выводиться последний элемент!!! -->
                  <xsl:apply-templates select="informationsystem_item[active=1][position() = 1]"/>
               </div>
            </div>
         </xsl:when>
      </xsl:choose>
      
      <!-- Отображение записи информационной системы -->
      <div class="content">
         <xsl:apply-templates select="informationsystem_item[active=1][position() &gt; 1]"/>
      </div>
   </xsl:template>
   
   <!-- Шаблон вывода информационного элемента -->
   <xsl:template match="informationsystem_item">
      <div class="col33"><!-- выводит элементы в 3 колонки -->
         <a href="{url}" class="onenews" >
            <!-- Изображение для информационного элемента (если есть) -->
            <xsl:if test="image_small!=''">
               <span class="imgwrap">
                  <span class="img" style="background-image:url({dir}{image_small})"></span>
                  <span class="imganim"></span>
               </span>
            </xsl:if>
            <xsl:if test="description != ''">
               <span class="desc">
                  <xsl:value-of disable-output-escaping="yes" select="description"/>
               </span>
            </xsl:if>
            <span class="date">
               <xsl:value-of disable-output-escaping="yes" select="date"/>
            </span>
         </a>
      </div>
      
   </xsl:template>

<!-- Шаблон вывода последнего информационного элемента -->
   <xsl:template match="informationsystem_item[active=1][position() = 1]">
         <!-- Изображение для информационного элемента (если есть) -->
      <xsl:if test="image_small!=''">
         <a class="teaser" href="{url}">
            <img src="{dir}{image_large}"/>
         </a>
      </xsl:if>
      
      <span class="date">
         <xsl:value-of disable-output-escaping="yes" select="date"/>
      </span>
      
      <!-- Название -->
      <a href="{url}"  hostcms:id="{@id}" hostcms:field="name" hostcms:entity="informationsystem_item" class="header">
         <span><xsl:value-of disable-output-escaping="yes" select="name"/></span>
      </a>
      
      <xsl:if test="description != ''">
         <div hostcms:id="{@id}" hostcms:field="description" hostcms:entity="informationsystem_item" hostcms:type="wysiwyg"><xsl:value-of disable-output-escaping="yes" select="description"/></div>
      </xsl:if>
      <div style="clear: both"></div>
   </xsl:template>
</xsl:stylesheet>


Таким образом, у последнего активного элемента ИС - свой шаблон и свой контейнер для вывода.
Авторизация