列表视图中的查找字段的自定义xsl呈现(SharePoint 2010)

时间:2010-05-28 13:00:12

标签: sharepoint xslt sharepoint-2010

我正在尝试更改列表视图页面上列表列的呈现。

经过一些教程和一些头发拉动后,我设法为计算和货币字段创建了一个xslt(来自fldtypes_XXXXXX.xsl):

<xsl:template match ="FieldRef[@Name='MarkCalc']" mode="Text_body">
  <xsl:param name="thisNode" select="."/>
  <xsl:value-of select="$thisNode/@*[name()=current()/@Name]" disable-output-escaping ="yes"/>
</xsl:template>

<xsl:template match="FieldRef[@Name='CurrencyTest']" mode="Number_body">
  <xsl:param name="thisNode" select="."/>
  <b><xsl:value-of disable-output-escaping="yes" select="$thisNode/@*[name()=current()/@Name]" /></b>
</xsl:template>

然后我尝试对查找字段执行相同操作,但它不起作用。这是我的最后一次尝试(我从SharePoint设计器复制它)。我错过了什么?

<xsl:template match="FieldRef[(@Encoded) and @Name='Lookup1']" mode="Lookup_body">
  <xsl:param name="thisNode" select="."/>
  <b><xsl:value-of select="$thisNode/@*[name()=current()/@Name]" disable-output-escaping="yes" /></b>
</xsl:template>

2 个答案:

答案 0 :(得分:8)

事实证明,这完全是xsl问题。

Xsl处理器根据“匹配”和“模式”属性选择要使用的模板。当两个或多个模板匹配时,将优先选择要使用的模板。默认情况下,根据匹配的具体方式分配三个级别的优先级。

来自http://www.codetoad.com/xml/xslt8.asp

  
      
  • 与一类节点匹配的模式,例如*,匹配所有节点   元素,被赋予隐式   优先级为-0.5

  •   
  • 根据名称匹配节点的模式,例如Character,   哪个匹配元素,   被赋予隐含优先级0

  •   
  • 根据其上下文匹配节点的模式,例如   CastMember / Character,匹配    父元素为的元素    元素,被分配   隐式优先级为0.5

  •   
     

根据时分配优先级   模式,无所谓   具体的上下文信息是:   如果为节点指定任何上下文   那么模板的优先级为   0.5。例如,描述/链接/字符具有完全一致性   同样的优先事项   描述//字符。

在SharePoint中,有两个用于查找字段的模板

<xsl:template name="FieldRef_Lookup_body" match="FieldRef" mode="Lookup_body" ddwrt:dvt_mode="body">...

<xsl:template match="FieldRef[@Encoded]" mode="Lookup_body" ddwrt:dvt_mode="body">

第一个优先级为0(根据其名称匹配),第二个优先级为0.5(根据上下文匹配)。

我的自定义模板应覆盖编码查找

<xsl:template match="FieldRef[(@Encoded) and @Name='Lookup1']" mode="Lookup_body">...

也有默认优先级0.5(记住,“......上下文信息的具体程度并不重要......”),因此xsl处理器选择最后一个定义的(*)。

要解决此问题,您可以使用属性优先级并将其设置为更高值,而不是默认模板。就我而言,我把它设置为1。

<xsl:template match="FieldRef[(@Encoded) and @Name='Lookup1']" priority="1" mode="Lookup_body">...



(*)显然SharePoint在加载自己的模板之前加载自定义模板。无论这是基于某些技术标准的选择还是为了确保我学习xsl,仍然是个谜。

答案 1 :(得分:0)

我有类似的问题,但我使用的是Sharepoint 2013.在Sharepoint 2013中,这是使用客户端渲染完成的,因此这种方法不起作用。 Insted签出http://www.sharepointnutsandbolts.com/2013/01/using-jslink-to-change-ui-of-sharepoint_20.html,或使用此(http://social.msdn.microsoft.com/Forums/sqlserver/en-US/9425e392-26ec-466b-a086-6581e035258f/sharepoint-2013-fldtypesxsl)方法强制服务器渲染。