【发布时间】:2012-03-27 19:00:38
【问题描述】:
这是我第一次发布这样的问题,如果我在这里胡言乱语,请提前致歉。
我正在尝试将 CQWP 与 jQuery 选项卡滑块功能放在一起。我要输出的 HTML 应该是 2 UL 的形式。第一个带有 li 锚标记的 #related-ul-id
第二个 ul 的 id 应该与第一个中的列表项相关联。例如
<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 变量为真时添加一个新的列表项。我剥离了这里的功能,只输出标题。这是 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 的 id 末尾"等。
理论上我认为我应该在我的 for-each 循环之外设置一个参数,然后在循环中调用一个模板来获取参数值并增加它。这意味着它只会在调用模板时递增。
我不能使用 position() 因为它不符合我想要的值。我尝试关注一些关于使用 xsl 进行递归编程的博客,但我似乎找不到任何有用的东西。我确定我只是写错了 XSL,但我现在有点脑残。
如果有人能指出我正确的方向,那就太棒了。非常感谢。
【问题讨论】:
-
只是补充一点,我知道我可以使用 jQuery 轻松做到这一点,但我试图将客户端脚本保持在最低限度。
-
目前尚不清楚,您是在尝试解决 jQuery 问题还是 xsl )如果是第二个 - 只需提供您的 xsl )
-
这是我正在努力解决的 XSL 增量问题。我只想在第一个列表项锚点上获取#tabs-1、#tabs-2,然后在第二个列表的列表项上获取 id=tabs-1 等。这是 XSL 的精简版
-
对不起,我花了这么长时间才回复,我以为有人回复时会有自动电子邮件。本来就是个布偶!反正我现在一直都开着:)谢谢你的回复!!
-
好多了,但仍然令人困惑)最好的方法是提供完整的输入和所需的输出数据集 - 进行实验)
标签: xslt sharepoint-2010 cqwp content-query-rollup