Новости на главной в 3 столбца

#
Новости на главной в 3 столбца
Хочу на главной вывести новости не в один столбец, а в три. Но не получается. Базовый 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">
   <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="/document"/>
   </xsl:template>
   
   <xsl:template match="/document">
      <!-- Выводим название информационной системы -->
      <h2>
         <a href="{blocks/url}" title="{blocks/name}"><xsl:value-of disable-output-escaping="yes" select="blocks/name"/></a>
      </h2>
      
      <!-- Отображение записи информационной системы -->
      <xsl:if test="blocks/items/item[item_status=1]">
         <dl class="news_list">
            <xsl:apply-templates select="blocks/items/item[item_status=1]"/>
         </dl>
      </xsl:if>
   </xsl:template>
   
   <!-- Шаблон вывода информационного элемента -->
   <xsl:template match="item">
      <!-- Дата время -->
      <dt>
         <xsl:value-of disable-output-escaping="yes" select="substring-before(item_date, '.')"/>
         <xsl:variable name="month_year" select="substring-after(item_date, '.')"/>
         <xsl:variable name="month" select="substring-before($month_year, '.')"/>
         <xsl:choose>
            <xsl:when test="$month = 1"> января </xsl:when>
            <xsl:when test="$month = 2"> февраля </xsl:when>
            <xsl:when test="$month = 3"> марта </xsl:when>
            <xsl:when test="$month = 4"> апреля </xsl:when>
            <xsl:when test="$month = 5"> мая </xsl:when>
            <xsl:when test="$month = 6"> июня </xsl:when>
            <xsl:when test="$month = 7"> июля </xsl:when>
            <xsl:when test="$month = 8"> августа </xsl:when>
            <xsl:when test="$month = 9"> сентября </xsl:when>
            <xsl:when test="$month = 10"> октября </xsl:when>
            <xsl:when test="$month = 11"> ноября </xsl:when>
            <xsl:otherwise> декабря </xsl:otherwise>
         </xsl:choose>
         <xsl:value-of disable-output-escaping="yes" select="substring-after($month_year, '.')"/>г.
      </dt>
      
      <!-- Название -->
      <dd>
         <a href="{item_path}" title="{item_name}">
            <xsl:value-of disable-output-escaping="yes" select="item_name"/>
         </a>
      </dd>
   </xsl:template>
</xsl:stylesheet>


Искал на форуме, но везде рассматривается вывод товаров. Помогите с решением, пожалуйста.
#
Re: Новости на главной в 3 столбца
onlinestudio, а вы сначала сверстайте в статичном html то чего хотите получить в выводе шаблона, и положите здесь, а то не понятно нифига, что у вас не получается.
Заказов не беру. Консультирую редко.
#
Re: Новости на главной в 3 столбца
Приведенный выше код XSL выводит новости так:

Дата 1
   Новость 1
Дата 2
   Новость 2
Дата 3
   Новость 3

т.е. в один столбец.
Я хочу выводить новости в три столбца, т.е.:

Дата 1              Дата 2             Дата 3
Новость 1           Новость 2          Новость 3
#
Re: Новости на главной в 3 столбца
onlinestudio, ну я же русским языком вам написал,
Kotoff писал(а):
сначала сверстайте в статичном html


Как должны выглядеть на экране три колонки я и без вашего примера себе ясно представляю
А вот как они должны быть у вас реализованы в html-коде - представления не имею, ни малейшего! Потому что три колонки можно реализовывать по-разному: с помощью таблицы, с помощью плавающих блоков, с помощью html5, еще каким-то образом...
Вот когда будет образец кода "как надо", тогда я смогу подсказать, что надо изменить в xsl-шаблоне, чтобы в результате было так же как в образце.

И это не только в конкретном данном случае. Это общее правило работы с любыми шаблонизаторами - сначала верстка в статике, потом подгонка шаблона под эту статику.
Заказов не беру. Консультирую редко.
#
Re: Новости на главной в 3 столбца
Пример:


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Пример</title>
<style>
.news_column {
   width: 33%;
   float: left;
}
</style>

</head>

<body>
<div class="news_column">
   Дата1<br>
    Новость1
</div>
<div class="news_column">
   Дата2<br>
    Новость2
</div>
<div class="news_column">
   Дата3<br>
    Новость3
</div>
<div style="clear:both"></div>
</body>
</html>
#
Re: Новости на главной в 3 столбца
Ну примерно так:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <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="/document"/>
   </xsl:template>

   <xsl:template match="/document">
      <!-- Выводим название информационной системы -->
      <!--<h2>
         <a href="{blocks/url}" title="{blocks/name}"><xsl:value-of disable-output-escaping="yes" select="blocks/name"/></a>
      </h2>-->

      <!-- Отображение записи информационной системы -->
      <xsl:if test="blocks/items/item[item_status=1]">
         <xsl:apply-templates select="blocks/items/item[item_status=1]"/>
         <div style="clear:both"></div>
      </xsl:if>
   </xsl:template>

   <!-- Шаблон вывода информационного элемента -->
   <xsl:template match="item">
      <div class="news_column">
         <!-- Дата время -->

         <xsl:value-of disable-output-escaping="yes" select="substring-before(item_date, '.')"/>
         <xsl:variable name="month_year" select="substring-after(item_date, '.')"/>
         <xsl:variable name="month" select="substring-before($month_year, '.')"/>
         <xsl:choose>
            <xsl:when test="$month = 1">января</xsl:when>
            <xsl:when test="$month = 2">февраля</xsl:when>
            <xsl:when test="$month = 3">марта</xsl:when>
            <xsl:when test="$month = 4">апреля</xsl:when>
            <xsl:when test="$month = 5">мая</xsl:when>
            <xsl:when test="$month = 6">июня</xsl:when>
            <xsl:when test="$month = 7">июля</xsl:when>
            <xsl:when test="$month = 8">августа</xsl:when>
            <xsl:when test="$month = 9">сентября</xsl:when>
            <xsl:when test="$month = 10">октября</xsl:when>
            <xsl:when test="$month = 11">ноября</xsl:when>
            <xsl:otherwise>декабря</xsl:otherwise>
         </xsl:choose>
         <xsl:value-of disable-output-escaping="yes" select="substring-after($month_year, '.')"/>г.
         <br/>

         <!-- Название -->

         <a href="{item_path}" title="{item_name}">
            <xsl:value-of disable-output-escaping="yes" select="item_name"/>
         </a>
      </div>
   </xsl:template>
</xsl:stylesheet>

Правда из вашего образца верстки не понятно, как должен вести себя шаблон, если новостей больше чем три...
Заказов не беру. Консультирую редко.
#
Re: Новости на главной в 3 столбца
Kotoff, спасибо. Как и хотелось. У меня конечно задумано выводить по 3-и новости, но вы озадачили про большее число.

Я так предполагаю если число новостей больше 3-х, то там надо использовать div или mod и как-то видоизменять под это дело XSL шаблон?
#
Re: Новости на главной в 3 столбца
Ну, самым правильным решенеим было бы поместить все новости в один общий div-контейнер, и настроить стили так, чтобы когда новостей больше трех, то блок с4й новостью автоматически втавал под первой, блок с 5й - под второй, ну и так далее.
Другой вариант, после каждых трех блоков с новостями вставлять
<div style="clear:both"></div>
.
Это так, сходу. Можно наверное и еще чего-то придумать...
Заказов не беру. Консультирую редко.
Авторизация