我們的一個客戶需要為文檔庫里的圖片添加縮略圖(Thubmnail)顯示方式, 但是我們知道SharePoint默認只有圖片庫(Picture Library)支持縮略圖的顯示方式.
既然我們知道圖片庫有縮略圖的功能, 我們就從圖片庫入手, 通過檢查發(fā)現(xiàn)圖片庫里有個字段”Thumbnail”,
只要添加了”Thubmnail”字段就能實現(xiàn)縮略圖的功能, 但是通過Site Column, 我們竟然找不到這個字段, 那就意味著我們不能通過簡單的添加來實現(xiàn)縮略圖的功能.
我們來深入了解下圖片庫有Thubmnail原因, 通過上面的調(diào)查發(fā)現(xiàn),只有圖片庫有Thubmnail字段, 那是否意味著Thumbnail字段僅僅被加入倒Picture Library的list Schema definition呢?
打開Picture Library的Schema 文件 (14\TEMPLATE\FEATURES\PictureLibrary\PicLib), 果然Schema中定義了Thum字段.
通過上圖可以發(fā)現(xiàn), Thumbnail 并不是一個字段,而是一個字段的集合, 這就需要我們添加Thumbnail 到其他表單類型的時候,要確認所有字段都要被添加.
為了確認所有的字段被添加, 我們可以通過把Picture content type添加到文檔庫.
通過下面方式添加Picture content type,并設(shè)置為默認類型
文檔庫 –> 列表設(shè)置 –> 高級設(shè)置 –> 允許管理內(nèi)容類型(選中)
通過以上的設(shè)置我們并不能把所有的字段都添加到這個文檔庫, 因為像"EncodedAbsThumbnailUrl” 這樣的字段都是圖片字特有的, 因此我們還需要通過代碼把它添加到文檔庫.
創(chuàng)建Thumbnail.XML
<Field ID="{ac7bb138-02dc-40eb-b07a-84c15575b6e9}" ReadOnly="TRUE" Type="Computed" Name="Thumbnail" ShowInNewForm="FALSE" ShowInFileDlg="FALSE" ShowInEditForm="FALSE" DisplayName="Thumbnail;" Sealed="TRUE" Sortable="FALSE" Filterable="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Thumbnail">
<FieldRefs>
<FieldRef Name="ImageWidth" />
<FieldRef Name="ImageHeight" />
<FieldRef Name="FSObjType" />
<FieldRef Name="EncodedAbsUrl" />
<FieldRef Name="Description" />
</FieldRefs>
<DisplayPattern>
<IfEqual>
<Expr1>
<LookupColumn Name="FSObjType" />
</Expr1>
<Expr2>0</Expr2>
<Then>
<IfEqual>
<Expr1>
<LookupColumn Name="ImageWidth" />
</Expr1>
<Expr2>
</Expr2>
<Then>
</Then>
<Else>
<IfEqual>
<Expr1>
<LookupColumn Name="ImageWidth" />
</Expr1>
<Expr2>0</Expr2>
<Then>
</Then>
<Else>
<HTML><![CDATA[<a href="]]></HTML>
<URL Cmd="Display" />
<HTML><![CDATA["><img border=0 ALT="]]></HTML>
<IfEqual>
<Expr1>
<Column Name="Description" />
</Expr1>
<Expr2>
</Expr2>
<Then>
<HTML><![CDATA[$Resources:core,Thumbnail;]]></HTML>
</Then>
<Else>
<Column Name="Description" HTMLEncode="TRUE" />
</Else>
</IfEqual>
<HTML><![CDATA[" SRC="]]></HTML>
<Field Name="EncodedAbsUrl" />
<HTML>
<![CDATA[">
</a>
]]>
</HTML>
</Else>
</IfEqual>
</Else>
</IfEqual>
</Then>
</IfEqual>
</DisplayPattern>
</Field>
然后通過SharePoint Object Model 添加這段XML. 代碼如下:
static void Main(string[] args)
{
//site url
using (SPSite osite = new SPSite("siteURL"))
{
using (SPWeb oweb = osite.OpenWeb())
{
//document library name
SPList olist = oweb.Lists["documetn library"];
//Thumbnail xml path
StreamReader rdr = new StreamReader(@"Thumbnails.xml");
string fld = rdr.ReadToEnd();
olist.Fields.AddFieldAsXml(fld, true, SPAddFieldOptions.AddToDefaultContentType);
olist.Update();
}
}
}
這樣我們就實現(xiàn)了library中圖片縮略圖. 上傳個圖片試試吧.