Това е първият път, когато публикувам въпрос, така че се извинявам предварително, ако бърборя тук.
Опитвам се да събера CQWP с функционалност на плъзгача за раздели jQuery. HTML, който искам да изведа, трябва да бъде под формата на 2 UL. Първият с li anchor тагове с #associated-ul-id
Вторият ul трябва да има идентификатори, които се свързват с елементите от списъка в първия. напр
<div id="tabs" class="news">
<div class="news-pagination">
<a href="/bg#" id="carouseltext-prev">« Prev</a>
<ul id="carouseltext" class="horizontal-text order">
<li><a href="/bg#tabs-1">System</a></li>
<li><a href="/bg#tabs-2">School</a></li>
</ul>
<a href="/bg#" 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 са верни. Намалих функционалността тук, за да изведа само заглавката. Ето съкратена версия на 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 погрешно, но сега имам малко мозъчно изхвърляне.
Ако някой може да ме насочи в правилната посока, това би било страхотно. Много благодаря.