Это первый раз, когда я когда-либо извиняюсь за вопрос заранее, если я здесь трепаться.
Я пытаюсь собрать CQWP с функциональностью слайдера вкладок jQuery. HTML-код, который я хочу вывести, должен быть в форме 2 UL. Первый с тегами привязки li с # related-ul-id
У второго ul должны быть идентификаторы, которые ассоциируются с элементами списка в первом. Например,
<div id="tabs" class="news">
<div class="news-pagination">
<a href="#" id="carouseltext-prev">« Prev</a>
<ul id="carouseltext" class="horizontal-text order">
<li><a href="#tabs-1">System</a></li>
<li><a href="#tabs-2">School</a></li>
</ul>
<a href="#" id="carouseltext-next">» Next</a>
<div class="clear"> </div>
</div>
<ul id="tabs-1" class="feed order">
<li>title 1</li>
<li>title 2</li>
</ul>
<ul id="tabs-2" class="feed order">
<li>title 3</li>
</ul>
</div>
Исходный XML начинается в форме
Мой XSL проходит через XML дважды, чтобы заполнить 2 ul. В первый раз он просто добавляет новый элемент списка, когда переменные __begincolumn и __begingroup имеют значение true. Я сократил функциональность, чтобы вывести заголовок. Вот урезанная версия XSL
<xsl:template match="/">
<xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row" />
<xsl:variable name="RowCount" select="count($Rows)" />
<xsl:variable name="FirstRow" select="1" />
<xsl:param name="ColNumber" select="1" />
<xsl:for-each select="$Rows" >
<xsl:variable name="CurPosition" select="position()" />
<xsl:variable name="BeginNewsItemsList1" select="string('<ul id="tabs-')" />
<xsl:variable name="BeginNewsItemsList2" select="string('"class="feed order">')" />
<xsl:variable name="BeginNewsItemsList" select="concat($BeginNewsItemsList1, $ColNumber, $BeginNewsItemsList2)" />
<xsl:if test="($CurPosition >= $FirstRow and $CurPosition <= $LastRow)">
<xsl:variable name="StartNewGroup" select="@__begingroup = 'True'" />
<xsl:variable name="StartNewColumn" select="@__begincolumn = 'True'" />
<xsl:when test="$StartNewGroup and $StartNewColumn">
<xsl:choose>
<xsl:when test="$CurPosition = $FirstRow">
<xsl:value-of disable-output-escaping="yes" select="$BeginNewsItemsList" />
</xsl:when>
<xsl:otherwise>
<!-- other instructions -->
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="$StartNewGroup">
<xsl:call-template name="OuterTemplate.CallFooterTemplate"/>
<xsl:value-of disable-output-escaping="yes" select="concat($EndColumn, $BeginNewsItemsList)" />
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template name="OuterTemplate.Count">
<xsl:param name="ColNumber" />
<xsl:value-of select="$ColNumber + 1" />
</xsl:template>
Для второго цикла for-each у меня возникают проблемы при настройке счетчика, чтобы я мог добавить число в конец идентификатора для каждого нового списка. Id = "tabs-1", id = "tabs-2 и т. д.
Теоретически я думаю, что должен установить параметр вне моего цикла for-each, а затем в цикле вызвать шаблон, который получает значение параметра и увеличивает его. Это будет означать, что он будет увеличиваться только при вызове шаблона.
Я не могу использовать position () для этого, так как он не соответствует значениям, которые я хочу. Я попытался подписаться на пару блогов о рекурсивном программировании с помощью xsl, но я не могу найти ничего, что работает. Я уверен, что просто неправильно пишу XSL, но сейчас у меня небольшая мозговая утечка.
Если бы кто-нибудь мог указать мне правильное направление, это было бы здорово. Большое спасибо.