如何:为内容查询 Web 部件自定义 XSL

上次修改时间: 2015年3月9日

适用范围: SharePoint Server 2010

可以使用内容查询 Web 部件聚合来自网站中多个数据源的内容,然后将其全部呈现在一个位置。配置和自定义内容查询 Web 部件之前,应考虑想实现的品牌和网站设计。Microsoft SharePoint Server 2010 包含三个您可以修改的可扩展样式语言 (XSL) 文件,通过修改这些文件,您可以使用内容查询 Web 部件用于显示它聚合的内容的样式来呈现字段。

本主题指出内容查询 Web 部件使用的三个 XSL 文件,并说明它们的工作原理;另外还指出您可以修改的模板和变量,并说明如何修改这些文件,以便内容查询 Web 部件呈现具有您指定的外观和行为的数据。

下表列出并说明了三个用于描述内容查询 Web 部件的 XSL 文件。

文件

位置

说明

ContentQueryMain.xsl

\Style Library\XSL Style Sheets\ContentQueryMain.xsl

  • 包含为每个项目生成对 Header 和 Item 模板的适当调用的逻辑。

  • 包含帮助设计者修改 Item 和 Header XSLT 转换的函数。

  • 接收所有内容并分析它,然后将相应的部分发送给 ItemStyle 和 Header 模板。

  • 维护内容查询 Web 部件的结构。

  • 将查询内容时检索到的数据存储在 /dsQueryResponse/Rows/Row 路径中。

ItemStyle.xsl

\Style Library\XSL Style Sheets\ItemStyle.xsl

包含定义如何显示项目的模板。这些模板一次接收和处理一行数据,确保项目行中的样式和数据保持一致。

可以通过使用 @Property 指令检索有关某一行的数据。

Header.xsl

\Style Library\XSL Style Sheets\Header.xsl

包含定义如何显示标题和确保组标头一致性的模板。

在 Header.xsl 中指定的模板接收要处理的下一项目行,这通常是组中的第一行(除非有多个列)。如果有多个列,则模板接收列的第一行。

可以通过使用 @Property 指令检索有关下一项目行的数据。可以使用包含"groupby"列名的 $Group 参数,以及表示"groupby"列的列类型的 $GroupType。

默认情况下,ItemStyle.xsl 和 Header.xsl 文件中包含下列模板。Header.xsl 文件包含组样式定义,而 ItemStyle.xsl 文件包含应用于内容查询 Web 部件中的行项目的定义。这些样式对应于"组样式"和"项目样式"下拉列表(当您在"样式库"中选择样式时出现)中的可用选项。

备注

在下表中,模板以它们出现在文件中的顺序列出。

文件名

模板

内容查询 Web 部件操作

ItemStyle.xsl

Default

LinkImage 在左侧。

LinkTitle 在顶部。

Description 在下方。

ItemStyle.xsl

NoImage

LinkTitle 在顶部。

Description 在下方。

ItemStyle.xsl

TitleOnly

项目仅包含 LinkTitle。

ItemStyle.xsl

Bullets

项目包含前置项目符号的 LinkTitle。

ItemStyle.xsl

ImageRight

LinkImage 在右侧。

LinkTitle 在顶部。

Description 在下方。

ItemStyle.xsl

ImageTop

LinkImage 在上方。

LinkTitle 在中间。

Description 在下方。

ItemStyle.xsl

ImageTopCentered

LinkImage 在上方并居中。

LinkTitle 在中间。

Description 在下方。

ItemStyle.xsl

LargeTitle

LinkImage 在左侧。

LargeLinkTitle 在顶部。

Description 在下方。

ItemStyle.xsl

ClickableImage

仅包含 LinkImage。

ItemStyle.xsl

NotClickableImage

仅包含无链接的图像。

ItemStyle.xsl

FixedImageSize

在左侧有大小限制的 LinkImage。

LinkTitle 在顶部。

Description 在下方。

ItemStyle.xsl

TitleWithBackground

包含带有背景色的 LinkTitle。

文件名

模板

内容查询 Web 部件操作

Header.xsl

DefaultHeader

以中等字体大小显示组标头。

Header.xsl

LargeText

以较大的字体大小显示组标头。

Header.xsl

SmallText

以较小的字体大小显示组标头。

Header.xsl

Band

显示带有背景色(方块状)的组标头。

Header.xsl

Centered

使组标头居中。

Header.xsl

Separator

在组标头和下方的内容之间插入一行。

Header.xsl

Whitespace

在组标头和下方的内容之间插入空白。

每个模板均包含两部分处理指令:

  • 处理数据和确保正确格式化的 <xsl:variable> 部分。

  • 呈现 HTML 并包含数据的 <div> 部分。

以下是 ImageRight 模板的模板代码(带有注释):

///Declares an XSL template named ImageRight that

///processes row style elements defined as ImageRight.

- <xsl:template name="ImageRight" match="Row[@Style='ImageRight']"
mode="itemstyle">

///The <xsl:variable> sections process and ensure correct formatting of the data.

///This section declares the variable named SafeLinkUrl, includes instructions to call the OuterTemplate.GetSafeLink function, and includes the LinkUrl expression to scope the call to the UrlColumnName parameter.
  - <xsl:variable name="SafeLinkUrl">
       /// The OuterTemplate.GetSafeLink variable passes in the UrlColumnName that represents the column name containing the ItemUrl.
    - <xsl:call-template name="OuterTemplate.GetSafeLink">
        <xsl:with-param name="UrlColumnName" select="'LinkUrl'" />
      </xsl:call-template>
    </xsl:variable>

///This section declares the variable named SafeImageUrl and calls the OuterTemplate.GetSafeStaticUrl function.
  - <xsl:variable name="SafeImageUrl">
    - <xsl:call-template name="OuterTemplate.GetSafeStaticUrl">
        <xsl:with-param name="UrlColumnName" select="'ImageUrl'" /> 
      </xsl:call-template>
    </xsl:variable>

///This section declares the variable named SafeImageHtml and calls the OuterTemplate.GetColumnDataForUnescapedOutput function, and passes the 'PublishingRollupImage' and 'Image' parameter values to the template rule.
  - <xsl:variable name="SafeImageHtml">
    - <xsl:call-template name="OuterTemplate.GetColumnDataForUnescapedOutput">
        <xsl:with-param name="Name" select="'PublishingRollupImage'" /> 
        <xsl:with-param name="MustBeOfType" select="'Image'" /> 
      </xsl:call-template>
    </xsl:variable>

///This section declares the variable named DisplayTitle, includes calls to the OuterTemplate.GetTitle function, and passes the @Title and 'LinkUrl' parameter values to the template rule.
  - <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>

///This section declares the variable named LinkTarget and tests whether it should open the target URL in a new window. If the test returns True, then the template rule processes the instruction to open the target URL in a new window.
  - <xsl:variable name="LinkTarget">
      <xsl:if test="@OpenInNewWindow = 'True'">_blank</xsl:if> 
    </xsl:variable>

///The <div> sections define the data to render and provide instructions on how to render it. This code block defines item data, and uses the OuterTemplate.CallPresenceStatusIconTemplate function to verify whether it should create an icon.
- <div class="item">
    <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate" />
///The <xsl:if test> instruction supplies a condition for the XSLT engine to evaluate. If the test evaluates to True after converting it to a Boolean value, the ItemStyle renders the content.
    - <xsl:if test="string-length($SafeImageUrl) = 0 and string-length($SafeImageHtml) != 0">
      - <div class="image-area-right">
          <xsl:value-of disable-output-escaping="yes" select="$SafeImageHtml" /> 
        </div>
      </xsl:if>
    - <xsl:if test="string-length($SafeImageUrl) != 0">
      - <div class="image-area-right">
        - <a href="{$SafeLinkUrl}" target="{$LinkTarget}">
            <img class="image" align="left" border="0"   src="{$SafeImageUrl}" alt="{@ImageUrlAltText}" /> 
          </a>
        </div>
      </xsl:if>
  - <div class="link-item">
    - <a href="{$SafeLinkUrl}" target="{$LinkTarget}" title="{@LinkToolTip}">
       <xsl:value-of select="$DisplayTitle" /> 
      </a>
      - <div class="description">
          <xsl:value-of select="@Description" /> 
        </div>
     </div>
  </div>
  </xsl:template>

SharePoint Server 2010 XSL 文件的 <xsl:variables> 部分中可使用多个函数,如下表中所示。

函数

说明

OuterTemplate.GetSafeLink

当用户传入 UrlColumnName(包含 ItemUrl 值的列名)时,此函数返回可安全显示给项目的 URL。

如果显示 URL 是不安全的,则此函数返回空白的 URL。

如果项目未经流处理,则此函数返回 CopyUtil URL。

OuterTemplate.GetSafeStaticUrl

当用户传入 UrlColumnName(存储 URL 的列的名称)时,如果显示 URL 是安全的,则此函数返回 URL。

如果显示 URL 是不安全的,则此函数返回空白的 URL。

OuterTemplate.GetColumnDataForUnescapedOutput

当用户传入 Name(从其检索数据的列名称)时,此函数获取列数据以提供非转义输出。

当用户传入 MustBeOfType(预期的列类型)时,如果列是正确的类型,则此函数返回内容。否则,它不返回任何数据。

OuterTemplate.GetTitle

当用户传入 Title(Title 列中的数据)时,此函数返回一个标题。

如果 Title 为空白,则页名称或者显示为空白,或者显示为标题。

OuterTemplate.FormatColumnIntoUrl

当用户传入 UrlColumnName(包含 URL 的列名称)时,此函数返回列中包含的 URL。

OuterTemplate.FormatValueIntoUrl

当用户传入一个表示在 Windows SharePoint Services 3.0 URL 列类型中找到的数据的 Value 时,Windows SharePoint Services 3.0 URL 列返回 URL 和替换文字。

返回列中包含的 URL。

OuterTemplate.Replace

如果用户执行下列操作之一:

  • 传入 Value,并表示要替换的字符串

  • 传入 Search,并表示要匹配的字符串

  • 传入 Replace,并表示要替换匹配项的字符串

此函数返回适当的搜索和替换文本。

OuterTemplate.GetPageNameFromUrl

当用户传入 UrlColumnName(项目 URL 的列名称)时,此函数返回 URL 中的页名称。

OuterTemplate.GetPageNameFromUrlRecursive

GetPageNameFromUrl 的帮助程序方法。

OuterTemplate.GetGroupName

当用户传入 GroupName 列的值时,此函数返回适当格式的组名。

如果此值为空,则它返回空白的组名。

当用户传入 GroupType 列(组的列类型)的值时,如果类型是 URL,则此函数返回页名称。

OuterTemplate.CallPresenceStatusIconTemplate

如果 @SipAddress 属性在当前行上存在,则它生成适当的标记,以便为 Microsoft Office Outlook 2007 或 Microsoft Office Communicator 2007 创建一个状态标记。

添加内容查询 Web 部件并自定义内容查询 Web 部件 XSL

  1. 导航到网站的主页,单击"网站操作",再单击"编辑网页",以在编辑模式下签出网页。

  2. 在某个"Web 部件区域"中,单击"添加 Web 部件",然后选择并添加一个内容查询 Web 部件。

  3. 单击"编辑",再单击"修改共享 Web 部件"。

  4. 根据需要修改属性以及将字段添加到内容查询 Web 部件中。有关详细信息,请参阅如何:使用自定义属性自定义内容查询 Web 部件

    备注

    当您修改内容查询 Web 部件时,"样式"部分中有两个下拉列表:一个用于"组"样式,另一个用于"项目"样式。这些列表项都是由 ItemStyle.xsl 和 Header.xsl 文件中的模板定义的。

  5. 使用本主题中的参考信息作为指南,通过编辑 XSL 来修改 select 语句、变量和表达式的值。例如,可以修改 <div> 部分中的 select 语句的值,以指示表达式解析到另一个变量。

创建项目样式

  1. 找到与您要创建的样式类似的样式。

  2. 复制该样式,并更改 name 和 match 属性值:

    <xsl:template name="ImageRight" match="Row[@Style='ImageRight']" mode="itemstyle">
    <xsl:template name="ImageRight2" match="Row[@Style='ImageRight2']" mode="itemstyle">
    

请参阅

任务

如何:使用自定义属性自定义内容查询 Web 部件

如何:自定义内容查询 Web 部件的 RSS

如何:在内容查询 Web 部件中显示自定义字段