最近有个需求,将不同的内容类型组织到同一个列表(不是文档库)中,希望能够给不同的内容类型显示不同的图标。不过SharePoint内容类型似乎没有关于图标的设置,翻了ContentType的SchemaXml和若干个xml配置文件都没找到相关的办法。
今天突然想到了计算字段,猜测大概能做到这一点,不过计算字段只能显示单行文本、数值、是/否等几种固定类型,不能显示html内容,我觉得可以通过修改默认的计算字段配置文件来达到这一目的。上网搜了一下,果然找到:Enabling HTML and/or Images in a SharePoint List using a calculated field
大致的方法就是控制计算字段在显示的时候的html编码,在FLDTYPES.XML中我们可以看到默认是这个样子的:
1
<
Default
>
2
<
Column
HTMLEncode
="TRUE"
AutoHyperLink
="TRUE"
AutoNewLine
="TRUE"
/>
3
</
Default
>
也就是说对于单行文本的显示方式,都是加上了HTML编码的,自然我们可以改掉这个地方,但是为了不影响其他计算字段的显示,可以用一些特定标记来判断,比如改成这样:
1
<
IfSubString
>
2
<
Expr1
>
<![CDATA[
<custom/>
]]>
</
Expr1
>
3
<
Expr2
><
Column
/></
Expr2
>
4
<
Then
>
5
<
HTML
><
Column
/></
HTML
>
6
</
Then
>
7
<
Else
>
8
<
Column
HTMLEncode
="TRUE"
AutoHyperLink
="TRUE"
AutoNewLine
="TRUE"
/>
9
</
Else
>
10
</
IfSubString
>
这段的意思是:如果计算字段的值包含“<custom/>”(这不是一个html标签,所以页面上不会显示),那么就不编码,否则对内容进行html编码。
于是,就可以在列表中创建一个计算字段栏Icon,它的公式设置成:
1
=
IF
(
[内容类型]
=
"
类型A
"
,
2
"
<custom/><img src='/_layouts/images/img1.gif'/>
"
,
3
"
<custom/><img src='/_layouts/images/img2.gif'/>
"
)
要是支持SWITCH就更好了……