Разделитель между товарами

#
Разделитель между товарами
Интересует возможность реализовать следующую конструкцию вывода html в каталоге товаров:

Например товаров выводится 3 штук

<div>
  <div class="line">
    <div class="tovar"></div>
    <div class="tovar"></div>
  </div>
  <div class="no_line">
    <div class="tovar"></div>
    
  </div>
</div>


как видно из кода между двумя товарами появляется линия, которой нет внизу.

в шаблоне <xsl:template match="item"> пишу следующее:

<xsl:choose>
   <xsl:when test="position() mod 2 = 0 and position() &lt; last()-2">
      <xsl:text disable-output-escaping="yes">
         &lt;/div&gt;
         &lt;div class="line"&gt;
      </xsl:text>
   </xsl:when>
   <xsl:when test="position() = last()-2">
      <xsl:text disable-output-escaping="yes">
         &lt;/div&gt;
         &lt;div class="no_line"&gt;
      </xsl:text>
   </xsl:when>
   <xsl:otherwise></xsl:otherwise>
</xsl:choose>


в итоге получается не совсем правильный вывод:

<div>
  <div class="line">
    <div class="tovar"></div>
  </div>
  <div class="no_line">
    <div class="tovar"></div>
    <div class="tovar"></div>
  </div>
</div>


Помогите.
Модератор
#
Re: Разделитель между товарами
<xsl:variable name="myclass">
<xsl:choose>
   <xsl:when test="position() mod 2 = 0">line</xsl:when>
   <xsl:otherwise>no_line</xsl:otherwise>
</xsl:choose></xsl:variable

<!-- выносите все это в начало блока показа товаров -->

<div class="{$myclass}">
   <!-- Здесь показ двух товаров -->
</div>


Только сам показ товаров придется переделать, либо пересмотрите в своем варианте условия (также почему-то не используете <xsl:otherwise>, а пишите второе условие).
#
Re: Разделитель между товарами
спасибо!
не пойму правда как добавить сюда переменную {myclass}

<xsl:text disable-output-escaping="yes">
         &lt;/div&gt;
         &lt;div class="no_line ---сюда---"&gt;
      </xsl:text>
Модератор
#
Re: Разделитель между товарами
xshock,
я бы проверял на условие для no_line
position() + 2 > last()
в остальных случаях line
#
Re: Разделитель между товарами
не пойму правда как добавить сюда переменную {myclass}

<xsl:text disable-output-escaping="yes">
         &lt;/div&gt;
         &lt;div class="no_line ---сюда---"&gt;
      </xsl:text>
Модератор
#
Re: Разделитель между товарами
xshock,
сюда никак, я привел пример для другой реализации. Замените условие и отладьте.
#
Re: Разделитель между товарами
все дело в том что разделитель находится в шаблоне
<xsl:template match="item">

если я указал ваш код в начале вывода товаров, а именно:

<div class="{$myclass}">
   <xsl:apply-templates select="item" />
</div>

то как мне вывести разделитель?

Модератор
#
Re: Разделитель между товарами
xshock,
уточните, Вы читаете мои ответы? HostCMS писал(а):
сюда никак, я привел пример для другой реализации. Замените условие и отладьте.

HostCMS писал(а):
Только сам показ товаров придется переделать, либо пересмотрите в своем варианте условия (также почему-то не используете <xsl:otherwise>, а пишите второе условие).
#
Re: Разделитель между товарами
HostCMS, все получилось! Невнимательно прочитал ваши сообщения!

в шаблон "item"
в начало вывел:

<xsl:if test="position() = 1">
   <xsl:text disable-output-escaping="yes">
      &lt;div class="line"&gt;
   </xsl:text>
</xsl:if>


перед закрывающим тегом шаблона item добавил:

<xsl:choose>
   <xsl:when test="position() mod 2 = 0 and position() &lt; last()-2">
      <xsl:text disable-output-escaping="yes">
         &lt;/div&gt;
         &lt;div class="cat_line line3"&gt;
      </xsl:text>
   </xsl:when>
   <xsl:when test="position() + 2 > last()">
      <xsl:text disable-output-escaping="yes">
         &lt;/div&gt;
         &lt;div class="cat_line line"&gt;
      </xsl:text>
   </xsl:when>
   <xsl:otherwise></xsl:otherwise>
</xsl:choose>
пока работает :)


#
Re: Разделитель между товарами
при выводе 6 товаров сломалось((
Авторизация