panjianm 发表于 2015-9-26 10:59:47

使用XSLT更改SharePoint视图展示

  SharePoint视图XSLT的位置都放在Layouts/XSL目录下,主要用到三个文件
  main.xsl
  vwstyles.xsl
  fldtypes.xsl
  我们需要创建一个自定义的xsl如sample.xsl重载Xslt的一些关键模板,达到更改界面显示的目的。
  找到fldtypes.xsl, PrintField节点是显示字段模板的

<xsl:template name=&quot;PrintField&quot; ddwrt:dvt_mode=&quot;body&quot; ddwrt:ghost=&quot;always&quot;>
<xsl:param name=&quot;thisNode&quot; select=&quot;.&quot;/>
<xsl:param name=&quot;Position&quot; select=&quot;1&quot; />
<xsl:param name=&quot;Type&quot; select=&quot;string(@Type)&quot;/>
<xsl:param name=&quot;Name&quot; select=&quot;string(@Name)&quot;/>
<xsl:param name=&quot;folderUrlAdditionalQueryString&quot;/>
<xsl:choose>
<xsl:when test=&quot;$Type='DateTime'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;DateTime_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Type='Computed'&quot;>
<xsl:choose>
<xsl:when test=&quot;$Name='LinkTitle' or $Name='LinkTitleNoMenu'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Computed_LinkTitle_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Name='LinkFilename' or $Name='LinkFilenameNoMenu'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Computed_LinkFilename_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Name='DocIcon'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Computed_DocIcon_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
<xsl:with-param name=&quot;folderUrlAdditionalQueryString&quot; select=&quot;$folderUrlAdditionalQueryString&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Name='NameOrTitle'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Computed_NameOrTitle_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Name='URLwMenu'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Computed_URLwMenu_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Name='HealthReportSeverityIcon'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Computed_HealthReportSeverityIcon_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Name='LinkDiscussionTitle' or $Name='LinkDiscussionTitleNoMenu'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Computed_LinkDiscussionTitle_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Name='Threading' or $Name='BodyAndMore'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Computed_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot; />
<xsl:with-param name=&quot;Position&quot; select=&quot;$Position&quot; />
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Computed_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test=&quot;$Type='Attachments'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Attachments_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Type='User' or $Type='UserMulti'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;User_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Type='Note'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Note_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Type='Text'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Text_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Type='Number' or $Type='Currency'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Number_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Type='Lookup' or $Type='LookupMulti' or $Type='WorkflowStatus'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Lookup_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Type='URL'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;URL_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Type='CrossProjectLink'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;CrossProjectLink_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Type='Recurrence'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;Recurrence_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;$Type='AllDayEvent'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;AllDayEvent_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:when test=&quot;@CAMLRendering='TRUE'&quot;>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;CAMLRendering_body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;body&quot;>
<xsl:with-param name=&quot;thisNode&quot; select=&quot;$thisNode&quot;/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
  所以如果我们完全不想要SharePoint自带这么复杂的计算,可以这样写



<?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?>
<xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
xmlns:msxsl=&quot;urn:schemas-microsoft-com:xslt&quot; exclude-result-prefixes=&quot;msxsl&quot;>
<xsl:import href=&quot;/_layouts/xsl/main.xsl&quot;/>
<xsl:template mode=&quot;Item&quot; match=&quot;Row&quot;>
<xsl:param name=&quot;Fields&quot; select=&quot;.&quot;/>
<xsl:param name=&quot;Collapse&quot; select=&quot;.&quot;/>
<xsl:param name=&quot;Position&quot; select=&quot;1&quot; />
<xsl:param name=&quot;Last&quot; select=&quot;1&quot; />
<xsl:variable name=&quot;thisNode&quot; select=&quot;.&quot;/>
<xsl:for-each select=&quot;$Fields&quot;>
<xsl:value-of select=&quot;$thisNode/@*&quot;/>
</xsl:for-each>
</xsl:template>
<xsl:template match=&quot;View&quot; mode=&quot;full&quot;>
<tr>
<td>
<xsl:apply-templates select=&quot;.&quot; mode=&quot;RenderView&quot; />
<xsl:apply-templates mode=&quot;footer&quot; select=&quot;.&quot; />
</td>
</tr>
</xsl:template>
<xsl:template match=&quot;View&quot; mode=&quot;RenderView&quot;>
<xsl:variable name=&quot;Fields&quot; select=&quot;ViewFields/FieldRef&quot;/>
<xsl:variable name=&quot;Groups&quot; select=&quot;Query/GroupBy/FieldRef&quot;/>
<xsl:variable name=&quot;Collapse&quot; select=&quot;Query/GroupBy[@Collapse='TRUE']&quot;/>
<xsl:variable name=&quot;GroupCount&quot; select=&quot;count($Groups)&quot;/>
<xsl:for-each select=&quot;$AllRows&quot;>
<xsl:variable name=&quot;thisNode&quot; select=&quot;.&quot;/>
<xsl:variable name=&quot;Position&quot; select=&quot;position()&quot; />
<xsl:apply-templates mode=&quot;Item&quot; select=&quot;$thisNode&quot;>
<xsl:with-param name=&quot;Fields&quot; select=&quot;$Fields&quot;/>
<xsl:with-param name=&quot;Collapse&quot; select=&quot;$Collapse&quot;/>
<xsl:with-param name=&quot;Position&quot; select=&quot;position()&quot;/>
<xsl:with-param name=&quot;Last&quot; select=&quot;last()&quot;/>
</xsl:apply-templates>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
页: [1]
查看完整版本: 使用XSLT更改SharePoint视图展示