我正在尝试更改列表视图页面上列表列的呈现。
经过一些教程和一些头发拉动后,我设法为计算和货币字段创建了一个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>
答案 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)方法强制服务器渲染。