Вопрос по условию вывода товаров на xls

Вопрос по условию вывода товаров на xls
Ломаю голову над такой ситуацией.

Есть вывод товаров с группировкой по доп свойству (строка) в виде Заголовка(свойство) + таблица с ячейками (товары).

Используется условие:

<xsl:if test="position() mod 3 = 0">
                     <xsl:text disable-output-escaping="yes">
                        &lt;/tr&gt;
                        &lt;tr&gt;
                     </xsl:text>
                  </xsl:if>


Все бы хорошо но когда товаров получается 4(или краткое 4, допусти 8 и так далее) то вариант с разбиением строки после 3тьей ячейки не устраивает тк одна ячейка в строку очень некрасиво получается.

Вопрос как организовать условие чтобы вывод мог осуществляться либо 3 товара в строку, либо 2товара в строку - чтобы один товар все-таки не оставался в одной строке?

Допустим 4 товара, в первую строку выводим 2чейки, во вторую остальные 2.

Допустим 7 товаров, нужно вывести в первую строку 3ячейки, во вторую 2 ячейки, в третью - 2ячейки.
(естественно можно наоборот - сначал 2 в строку потом 3 потом опять 2 и тд - но хотябы что-то чтобы одна все-таки не была в строку... =)

Я пока думаю но может сможете подсказать. До этого у клиента вообще вывод товаров на главной был с помощью статического документа, сам строил в ряд эти ячейки.
После вывода товаров динамически соответственно встал вопрос как правильно бы организовать расположение товаров.

Cпасибо заранее за рассуждение.
ку
Re: Вопрос по условию вывода товаров на xls
Написание в поддержку по данному вопросу ускорит помощь? редакция Корпорация.
ку
Модератор
Re: Вопрос по условию вывода товаров на xls
compaq,
если вопрос для поддердки - его изначально нужно писать в поддержку. Если вопрос есть на форуме - из поддержки отправят вопрос решать здесь.

compaq писал(а):
Допустим 7 товаров, нужно вывести в первую строку 3ячейки, во вторую 2 ячейки, в третью — 2ячейки.
(естественно можно наоборот — сначал 2 в строку потом 3 потом опять 2 и тд — но хотябы что-то чтобы одна все-таки не была в строку… =)

Вам известно как работают таблицы в HTML? Чтобы в одной строке было 3, а в другой 2 - придется повозиться с объединениями, т.к. получится:
1|2|3
4|5|пусто

Если переверстать вывод на div с фиксированной шириной и float: left, то вероятно получится именно то, что нужно.
Re: Вопрос по условию вывода товаров на xls
я готов и на div... лиш бы условие выполнить в итоге на клиенте.. 8) подскажете?
ку
Re: Вопрос по условию вывода товаров на xls
Cейчас такой шаблон, не знаю но пустоты тут нет когда последние две ячейки выводятся в группе - я обрыв сделал на новую таблицу...

а вообще я запутался уже... клиент ругается а я туплю.

<?xml version="1.0" encoding="windows-1251"?>
<!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="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <xsl:decimal-format name="my" decimal-separator="," grouping-separator=" "/>
   <xsl:key name="key-group" match="item" use="property[@xml_name='item_main_group']/value" />
   
   <xsl:template match="/">
      <xsl:apply-templates select="/shop"/>
   </xsl:template>
   
   
   <!-- МагазинКаталогТоваровГлавная -->
   <xsl:template match="shop">
      
      <xsl:variable name="unique_group" select="//item[generate-id(.)=generate-id(key('key-group',property[@xml_name='item_main_group']/value))]/property[@xml_name='item_main_group']/value" />
      
      <xsl:for-each select="$unique_group">
         <h2 style="text-align:center"><xsl:value-of select="." /></h2>
         <table class="mainpage"> <tr>
               <xsl:for-each select="key('key-group', .)">
                  
                  <td valign="top">
                     <!-- Принадлежность товара -->
                  <h3><a href="{/shop/path}{fullpath}{path}/"><xsl:value-of select="property[@xml_name = 'item_for_what']/value"/></a></h3>
                     
                     <!-- Изображение для товара, если есть -->
                     <xsl:if test="property[@xml_name = 'item_img_index']/value != ''">
                        <a href="{/shop/path}{fullpath}{path}/">
                           <img src="{property[@xml_name = 'item_img_index']/small_image/file_path}" alt="" />
                        </a>
                     </xsl:if>
                     
                     <!-- Описание товара -->
                     <p><xsl:value-of select="property[@xml_name = 'item_mini_text']/value"/></p>
                     <p style="text-align:right">
                        цена:
                        <!-- Цена товара -->
                        <xsl:choose>
                           <xsl:when test="price != 0">
                              <span style="padding-right:10px;">
                                 <b>
                                    <xsl:variable name="price" select="price"/>
                                    <xsl:value-of select="format-number($price, '### ###,00', 'my')"/>&#xA0;
                                    <!-- Валюта товара -->
                                    <xsl:value-of disable-output-escaping="yes" select="currency"/>
                                 </b>
                              </span>
                           </xsl:when>
                           <xsl:otherwise>
                              <span style="font-size: 11pt">
                                 <b>цена&#xA0;договорная</b>
                              </span>
                           </xsl:otherwise>
                        </xsl:choose>
                     </p>
                     
                     <div class="more">
                        <p>
                           <!-- Сайт товара -->
                           <a href="{property[@xml_name='item_site']/value}" title="Перейти на сайт продукта" >сайт продукта</a><br />

                           <!-- Время использования -->
                           <span><xsl:value-of select="property[@xml_name = 'item_time_up']/value"/></span>
                        </p>

                        <!-- Корзина -->
                        <a href="{/shop/path}cart/?action=add&amp;item_id={@id}" onclick="return AddIntoCart('{/shop/path}', {@id}, document.getElementById('count_{@id}').value)" class="add">
                           <img alt="В корзину" title="В корзину" src="/i/add.png"/>
                        </a>
                     </div>
                  </td>
                  <xsl:if test="position() mod 3 = 0">
       <xsl:text disable-output-escaping="yes">
                        &lt;/tr&gt;
                        &lt;/table&gt;
                        &lt;table class="mainpage"&gt;
                        &lt;tr&gt;

                     </xsl:text>
                  </xsl:if>
               </xsl:for-each>

            </tr>
         </table>
         
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>
ку
Модератор
Re: Вопрос по условию вывода товаров на xls
compaq,
Вы можете четко сформулировать алгоритм, по которому должно работать?
Re: Вопрос по условию вывода товаров на xls
Я попытаюсь. А проще пример сайта прямо главная страница _athenaskincare.com. Смотреть как пример первые три строки:

Либо две ячейки в строку либо три. (точней скорей таблица новая начинается просто вот и все...)
То есть если получается что в группе у нас 7 товаров как пример - то они должны разбиться на 3ячейки и 2ячейки в строку в сумме (3 + 2 + 2 - это три таблицы тогда)
Если 4 товара в группе - то 2 + 2...

Надеюсь понятно обьясняю
Если не решить с таблицами то против div'ов нет возражений..
ку
Модератор
Re: Вопрос по условию вывода товаров на xls
compaq,
Вы можете математически описать алгоритм? Как определять по сколько выводить на страницу, если товаров 9, 10, 13?
Re: Вопрос по условию вывода товаров на xls
Давайте разберу по этим представленных кол-вам:

Ну вот если
9ть - то по 3 товара в строку...
10ть - 2 строки по 3 товара и две по 2 товара...
13ть - 3 строки по 3 товара и две по 2 товара...

14ть - 4 строки по 3товара и одна - 2товара..

Так понятно? Просто мне сложно описать словами этот алгоритм
ку
Модератор
Re: Вопрос по условию вывода товаров на xls
compaq писал(а):
Так понятно? Просто мне сложно описать словами этот алгоритм

я понимаю, но XSL-у нужен именно алгоритм. Получается выводить по 3 на строку, а если осталось меньше 3, то выводить отдельной таблицей?
Авторизация