Salve,伙计们!我的sharepoint页面中有一个选择字段,其中包含以下选项:
(1) Go
(2) Warning
(3) Stop
现在,我希望它作为图标而不是文本出现在列表中。我有一个工作的jquery脚本,但是要搜索包含文本的所有列表需要很长时间,最好还是使用xsl,因为它在显示之前呈现。
那么如何在xsl中实现这一目标呢?这是我得到的,因为我只学习xsl:
<xsl:stylesheet
xmlns:x="http://www.w3.org/2001/XMLSchema"
xmlns:d="http://schemas.microsoft.com/sharepoint/dsp"
version="1.0"
exclude-result-prefixes="xsl msxsl ddwrt"
xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:ddwrt2="urn:frontpage:internal">
<!-- Convert the Scope Field into an icon -->
<xsl:template match="FieldRef[@Name='Scope']">
<xsl:param name="thisNode" select="."/>
<xsl:choose>
<xsl:when test="$thisNode/@Scope='(1) Go'">
<td class="statusRating1"></td>
</xsl:when>
<xsl:when test="$thisNode/@Scope='(2) Warning'">
<td class="statusRating2"></td>
</xsl:when>
<xsl:when test="$thisNode/@Scope='(3) Stop'">
<td class="statusRating3"></td>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$thisNode/@Scope" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
这是我要申请的CSS:
.statusRating1{background-image: url("/_layouts/custom/images/go.png"); }
.statusRating2{background-image: url("/_layouts/custom/images/warning.png"); }
.statusRating3{background-image: url("/_layouts/custom/images/stop.png"); }
现在,我已尝试使用mode="Choice_body"
或mode="MultiChoice_body
甚至Text_body
,并尝试添加<xsl:apply-templates />
但它似乎从来没有挂钩。该列绝对名为“Scope”。也许我只需要add the right mode?
在萤火虫中,我可以看到该类永远不会添加。
[更新] 我注意到在我以这种方式使用模板的其他地方,模板永远不会“占用”,除非它定义了正确的mode
。但是,我搜索了世界各地,找不到用于选择字段的mode
权限。我甚至为 ,here创建了一个问题。此外,使用thisNode
来自Microsoft's examples,您可以在其中轻松修改字段类型(此处此选项字段除外)。
答案 0 :(得分:1)
要为mode
属性的模板中的Custom Rendering字段定义SPFieldChoice,应使用值 body
未定义名称为Choice_body
MultiChoice_body
的模式的模板。
因此,在您的情况下,模板将如下所示:
<xsl:template match="FieldRef[@Name='Scope']" mode="body">
未记录为呈现SharePoint字段定义的模板模式属性,但您可以在%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS\XSL\fldtypes.xsl
中找到此信息。有关详细信息,请参阅模板 PrintField 的实现。
希望这有帮助,
瓦迪姆
答案 1 :(得分:0)
您编写模板的事实不足以执行此模板。
如果选择执行XSLT内置(默认)模板的代码,则这些模板不知道任何名为$thisNode
的参数,也不会将此参数传递给模板。
这意味着启动模板时$thisNode
参数的值为空字符串 - 因此不满足xsl:when
个测试条件,因此选择了xsl:otherwise
<强>解决方案强>:
<强>要么强>:
在代码中有一个明确的xsl:apply-templates
,用于选择要与tempate匹配的节点,或者:
删除<xsl:param>
,并在$thisNode
出现.
时将代码替换为代码。