今天在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激活的时候把我们的样式加进入,停用的时候去掉。有空了再说吧。。。