我基本上编辑ItemStyle.xsl以使其检索我需要的内容并通过CQWP(内容查询Web部件)显示。我需要它只显示评论最多的前5个帖子。可以通过@NumComments检索评论。我不熟悉XSL知道怎么做,我假设使用计数?有小费吗?
这是该模板的当前XSL代码,它只显示所有帖子。
<xsl:template name="MostCommented" match="Row[@Style='MostCommented']" mode="itemstyle">
<xsl:variable name="SafeLinkUrl">
<xsl:call-template name="OuterTemplate.GetSafeLink">
<xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="DisplayTitle">
<xsl:call-template name="OuterTemplate.GetTitle">
<xsl:with-param name="Title" select="@Title"/>
<xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
</xsl:call-template>
</xsl:variable>
<div>
<a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="{@LinkToolTip}">
<xsl:value-of select="$DisplayTitle"/>
</a>
</div>
</xsl:template>
答案 0 :(得分:1)
您需要添加此代码 - 在与Row
的父匹配的模板中
<xsl:apply-templates select="Row[@Style='MostCommented']" mode="itemstyle">
<xsl:sort select="@NumComments" data-type="number" order="descending"/>
</xsl:apply-templates>
此外,在您的模板中(将作为上述xsl:apply-templates
选择执行的那个 将所有现有代码包装在条件中,如下所示强>:
<xsl:template name="MostCommented" match="Row[@Style='MostCommented']" mode="itemstyle">
<xsl:if test="not(position() > 5)">
<!-- Put all already-existing code here -->
</xsl:if>
</xsl:template>
以下是一个完整的示例,说明了这种技术:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<t>
<xsl:apply-templates select="*">
<xsl:sort select="@valued"
data-type="number" order="descending"/>
</xsl:apply-templates>
</t>
</xsl:template>
<xsl:template match="post">
<xsl:if test="not(position() >5)">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
将此转换应用于以下XML文档(因为您忘记提供一个!!!):
<t>
<post valued="5"/>
<post valued="2"/>
<post valued="9"/>
<post valued="8"/>
<post valued="6"/>
<post valued="3"/>
<post valued="4"/>
<post valued="10"/>
<post valued="2"/>
<post valued="7"/>
</t>
产生了想要的正确结果:
<t>
<post valued="10"/>
<post valued="9"/>
<post valued="8"/>
<post valued="7"/>
<post valued="6"/>
</t>
答案 1 :(得分:0)
我能够直接在CQWP Web部件中执行此操作,而不是使用ItemStyle.xsl
更换
<property name="QueryOverride" type="string" />
使用
<property name="QueryOverride" type="string"><![CDATA[<OrderBy><FieldRef Name="NumComments" Nullable="True" Type="Lookup" Ascending="False"/></OrderBy>]]></property>