今天在MOSS开发群里一哥们问怎么让图片库展示的时候像WINDOWS目录中展示图片一样,只显示缩略图
当然了,直接在视图设置里把显示字段只选择“缩略图”不是咱想要的。。。
在群里给他提供了思路后就干活了,不知道他做得怎么样,刚才有点时间,就弄了一下,发上来,或许对有些朋友有用。
先看效果图

点击小图在新窗口中打开原图,点击文件夹直接进入(这里进入文件夹没有特别处理,简单打开URL了)
好吧,简单说说实现步骤吧
其实很简单,就是做了一个视图样式,然后在视图设置里选择了这个样式:
这样式如何做的呢?
需要修改的文件如下:
C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\TEMPLATE\GLOBAL\XML\VWSTYLES.XML
推荐使用VS打开,整理一下代码。
把id为6的样式拷一份,粘到最后,修改ID为100或者别的大于20的数字。改diaplayname…..
关键部分就是在ViewBody这一节里,代码有点多,就不一点一点说了,直接粘上来。有啥问题可以回复。
<ViewStyle ID="100" DisplayName="仅缩略图 By:EricInBj@hotmail.com" BaseType="1" Preview="_layouts/images/prvpicl.gif" Description="用于图片库,设置此样式后视图页面上仅显示图片的缩略图,By: Eric| EricWang.cnblogs.com">
<ViewHeader>
<HTML><![CDATA[<DIV>]]></HTML>
<HTML>
<![CDATA[
<style>
.ImgContainer{
display:block;
float:left;
margin:2px;
border:1 solid gray;
}
.ImgContainer a{
}
.ImgContainer a:hover{
}
</style>
]]>
</HTML>
</ViewHeader>
<ViewBody>
<Switch>
<Expr>
<IfEqual>
<Expr1>
<LookupColumn Name="FSObjType"/>
</Expr1>
<Expr2>0</Expr2>
<Then>
<Field Name="EncodedAbsUrl"/>
</Then>
<Else>
<Field Name="ServerUrl" URLEncodeAsURL="TRUE"/>
</Else>
</IfEqual>
</Expr>
<Case Value="">
<HTML><![CDATA[<div]]></HTML>
</Case>
<Default>
<HTML>
<![CDATA[<div class="ImgContainer" id=row]]>
</HTML>
<Column Name="ID"/>
</Default>
</Switch>
<HTML><![CDATA[>]]></HTML>
<HTML>
<![CDATA[<table style="height: 150px; width: 150px; ">
<tr>
<td style="vertical-align: middle; text-align: center; ">
<a href="]]>
</HTML>
<Field Name="EncodedAbsUrl"/>
<HTML>
<![CDATA[" target="]]>
</HTML>
<IfEqual>
<Expr1>
<Field Name="FSObjType" />
</Expr1>
<Expr2>0</Expr2>
<Then>
<HTML>
<![CDATA[_blank"> <img border="0" src="]]>
</HTML>
<HttpVDir />
<HTML><![CDATA[/_layouts/AssetUploader.aspx?Size=&ImageUrl=]]></HTML>
<Field Name="ServerUrl" URLEncode="TRUE" />
</Then>
<Else>
<HTML><![CDATA[_self"> <img border="0" src="/_layouts/Images/Folder32.gif]]></HTML>
</Else>
</IfEqual>
<HTML><![CDATA["></a></td></tr></table>]]></HTML>
<HTML><![CDATA[</DIV>]]></HTML>
</ViewBody>
<ViewFooter>
<HTML><![CDATA[</DIV>]]></HTML>
</ViewFooter>
<GroupByHeader>
<HTML><![CDATA[<TBODY id="titl]]></HTML>
<GetVar Name="GroupByLevelString"/>
<HTML><![CDATA[" groupString="]]></HTML>
<GetVar Name="GroupByValueString"/>
<HTML><![CDATA["><TR><TD colspan="100"]]></HTML>
<Switch>
<Expr>
<GetVar Name="GroupByIndent"/>
</Expr>
<Case Value="0">
<HTML><![CDATA[ class="ms-gb" ]]></HTML>
</Case>
<Default>
<HTML><![CDATA[ class="ms-gb2" ]]></HTML>
</Default>
</Switch>
<HTML><![CDATA[ nowrap><img src="/_layouts/images/blank.gif" alt="" height=1 width=]]></HTML>
<GetVar Name="GroupByIndent"/>
<HTML><![CDATA[><a href="javascript:" onclick="javascript:ExpCollGroup(']]></HTML>
<GetVar Name="GroupByLevelString"/>
<HTML><![CDATA[','img_]]></HTML>
<GetVar Name="GroupByLevelString"/>
<HTML><![CDATA[');return false;"><img id="img_]]></HTML>
<GetVar Name="GroupByLevelString"/>
<HTML><![CDATA[" src="/_layouts/images/minus.gif" alt="]]></HTML>
<HTML>$Resources:groupExpColl;</HTML>
<HTML><![CDATA[" border="0"></a> ]]></HTML>
<HTML><![CDATA[<a href="javascript:" onclick="javascript:ExpCollGroup(']]></HTML>
<GetVar Name="GroupByLevelString"/>
<HTML><![CDATA[','img_]]></HTML>
<GetVar Name="GroupByLevelString"/>
<HTML><![CDATA[');return false;">]]></HTML>
<GetVar Name="GroupByField" HTMLEncode="TRUE" />
<HTML><![CDATA[</a> : ]]></HTML>
<GetVar Name="GroupByValue"/>
<HTML><![CDATA[</TD></TR></TBODY>]]></HTML>
<HTML>
<![CDATA[
<script>
fIsInGroupByView = true;
</script>]]>
</HTML>
</GroupByHeader>
<ViewFields>
<FieldRef Name="SelectedFlag"/>
<FieldRef Name="DocIcon"/>
<FieldRef Name="NameOrTitle"/>
<FieldRef Name="ImageSize"/>
<FieldRef Name="FileSizeDisplay"/>
<FieldRef Name="RequiredField" Explicit="TRUE"/>
</ViewFields>
<Script>
g_RequiredFields[100] = new Array;
</Script>
</ViewStyle>
但有一点不爽的就是:部署的时候需要手动修改这个文件,如果有多个前端,每次部署,更新,那够累的,该死的微软这里没有实现得很好,如果能像自定义字段那样部署多好。但也不是没办法。咱们可以写代码来修改这个文件,比如在Feature激活的时候把我们的样式加进入,停用的时候去掉。有空了再说吧。。。

浙公网安备 33010602011771号