Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Автоматическое формирование форм добавления объектов каталога

Автор diii3Раздел Шаблоны XSLT

Ответов: 5
Просмотров: 2318
Последний ответ 21 Январь 2012, 13:14:18
от diii3
Формирование xml карты сайта. Настройка роботс.тхт

Автор HardHardyРаздел Настройка системы и модулей

Ответов: 9
Просмотров: 5614
Последний ответ 28 Июль 2011, 09:32:17
от HardHardy
Формирование прямого sql запроса к таблицам БД

Автор atachРаздел Custom макросы

Ответов: 1
Просмотров: 1274
Последний ответ 11 Декабрь 2012, 18:33:19
от Vladimir
Ошибка при формирование заказа

Автор akarihРаздел Настройка системы и модулей

Ответов: 3
Просмотров: 2268
Последний ответ 16 Сентябрь 2011, 09:39:28
от PekopT
Вёрстка в несколько колонок через таблицы

Автор technoexpertРаздел Настройка системы и модулей

Ответов: 5
Просмотров: 2152
Последний ответ 30 Август 2012, 16:26:00
от admin

0 Пользователей и 1 Гость просматривают эту тему.

*

NOIRMAN

  • *****
  • 101
  • +16/-1
    • Просмотр профиля
Формирование таблицы
« : 13 Ноябрь 2011, 16:51:55 »
Впал я что то в ступор. Необходимо сформировать таблицу через usel запрос.

Вызываем в необходимом месте сам запрос
<table>
   <xsl:apply-templates select="document('usel://want-table')//udata" mode="table" />
</table>
Далее стоит вопрос динамического распределения таблицы
<xsl:template match="udata" mode="table">
   <xsl:apply-templates select="page" mode="table" />
</xsl:template>

<xsl:template match="page" mode="table">
   <td>Вывод необходимой информации</td>
   <xsl:if test="not ( position() mod 3 = 1)">
      <td class="razdelitel"></td>
   </xsl:if>
</xsl:template>

А вопрос в следующем - как вставить необходимые <tr></tr> самих строк, для корректной работы скрипта?

*

NOIRMAN

  • *****
  • 101
  • +16/-1
    • Просмотр профиля
Re:Формирование таблицы
« Ответ #1 : 13 Ноябрь 2011, 18:30:31 »
Решение нашлось. Может кому то поможет сей ресурс - http://ref.leechy.ru/xslt/ (да простит меня админ).

В итоге что у меня получилось (вдруг кто заинтересуется) -
Цитировать
<table>
   <tr>
      <xsl:apply-templates select="document('usel://want-table')//udata" mode="table" />
   </tr>
</table>

<xsl:template match="udata" mode="table">
   <xsl:apply-templates select="page" mode="table" />
</xsl:template>

<xsl:template match="page" mode="table">
   <td>Вывод необходимой информации</td>
   <xsl:if test="not ( position() mod 3 = 0)"> <!-- Вывод некоего разделителя между ячейками, для последней (3-й) ячейки не нужен -->
      <td class="razdelitel"></td>
   </xsl:if>

   <xsl:if test="(position() mod 3 = 0) and not(position() = last())">
   <xsl:text disable-output-escaping="yes"><![CDATA[</tr><tr>]]></xsl:text>
   </xsl:if>
</xsl:template>

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
Re:Формирование таблицы
« Ответ #2 : 14 Ноябрь 2011, 05:26:36 »
как вариант, вот еще один вариант

<xsl:apply-templates select="document('usel://want-table')//udata" mode="table" /> <!--вызов usel-->

<xsl:template match="udata" mode="table" /> <!--для сутиации когда usel ничего не вернул-->

<xsl:template match="udata[total]" mode="table">
<table>
<tr>
<xsl:apply-templates select="page" mode="table" />
</tr>
</table>
</xsl:template>

<xsl:template match="page" mode="table"> <!-- основной шаблон для td-->
<td>Вывод необходимой информации</td>
<xsl:apply-templates select="." mode="table_in" />
</xsl:template>

<xsl:template match="page" mode="table_in"> <!-- основной шаблон для td-->
<td class="razdelitel"></td>
</xsl:template>

<xsl:template match="page[(position() mod 3 = 0) and not(position() = last())]" mode="table_in"> <!-- шаблон для каждой 3 td кроме последней-->
<xsl:text disable-output-escaping="yes"><![CDATA[</tr><tr>]]></xsl:text>
</xsl:template>

возможно, проще было бы делать через блоки <div>, тогда у нас получилось бы

<xsl:apply-templates select="document('usel://want-table')//udata" mode="table" /> <!--вызов usel-->

<xsl:template match="udata" mode="table" /> <!--для сутиации когда usel ничего не вернул-->

<xsl:template match="udata[total]" mode="table">
<div class="conteiner">
<xsl:apply-templates select="page" mode="table" />
</div>
</xsl:template>

<xsl:template match="page" mode="table"> <!-- основной шаблон для td-->
<div class="razdelitel">Вывод необходимой информации</div>
</xsl:template>

<xsl:template match="page[(position() mod 3 = 0) and not(position() = last())]" mode="table"> <!-- шаблон для каждой 3 td кроме последней-->
<div class="razdelitel third">Вывод необходимой информации</div>
<!-- а если целью является перенос строки после 3 элементов, то можно вместо стиля third сразу прописать clear:both -->
<!-- <div class="razdelitel">Вывод необходимой информации</div>
<div style="clear:both;"> -->
</xsl:template>

конечно у класса .razdelitel должны быть стили вроде такого:
.razdelitel{float:left; width:200px;}