WSS或者MOSS的文档库中通常都通过Send To菜单来提供将文档下载或者邮件发送,你可以通过Download a Copy菜单项来打开/下载一份文档,但又的时候我们可能不想提供这样的方法,那如何来修改定制Send To菜单呢?
CreateMenu函数最终还会调用一些列的子函数来创建特定菜单的内容,而在最后它会调用CreateMenuEx函数来对像Meeting列表,Doc列表,Version等菜单项生成。
在上边的代码片段中我们可以看到针对ctx.listBaseType==1的文档列表调用了AddDocLibMenuItems函数来进行附加处理生成针对文档库的特定处理菜单项。而在这个函数中你最终会发现一个AddSendSubMenu这个函数,它做什么呢?顾名思义,就是产生SendTo菜单的。我们首先把这个函数的内容全部清空,只剩下函数声明,看看发生了什么?
你已经看不到Send To这个菜单项了,如果想移除Download a Copy那看来就得在这里边做文章了。
if (currentItemFSObjType !=1 && ctx.listBaseType==1 && (serverFileRedirect==null || serverFileRedirect=="" || HasRights(0x0, 0x20))) { if (ctx.listTemplate !=109 && ctx.listTemplate !=119) AddWorkspaceMenuItem(sm, ctx); strAction="STSNavigate('"+ ctx.HttpRoot+ "/_layouts/download.aspx?"+ "SourceUrl="+ currentItemEscapedFileUrl+ "&Source="+GetSource()+"&FldUrl="+escapeProperly(ctx.SendToLocationUrl)+"')"; menuOption=CAMOpt(sm, L_DownloadACopy_Text, strAction, ""); menuOption.id="ID_DownloadACopy"; } |
这里可以很清晰地看到是用上边的几句话生成了SendTo菜单。Ok,可以开始修改了,像它内置的一样,我们用ctx.listName或者ctx.listTemplate来可以限定针对 不同文档库类型或者特定文档列表的生成。比如我们对于一个自己定义的文档库不需要生成Send To的Download a Copy菜单,可以这么写:
if (currentItemFSObjType !=1 && ctx.listBaseType==1 && ctx.listName != "{A72CF38B-F456-496F-8ED3-FE2122CDE4FF}" && (serverFileRedirect==null || serverFileRedirect=="" || HasRights(0x0, 0x20))) { if (ctx.listTemplate !=109 && ctx.listTemplate !=119) AddWorkspaceMenuItem(sm, ctx); strAction="STSNavigate('"+ ctx.HttpRoot+ "/_layouts/download.aspx?"+ "SourceUrl="+ currentItemEscapedFileUrl+ "&Source="+GetSource()+"&FldUrl="+escapeProperly(ctx.SendToLocationUrl)+"')"; menuOption=CAMOpt(sm, L_DownloadACopy_Text, strAction, ""); menuOption.id="ID_DownloadACopy"; } |
结果正如预料的一样,Download a Copy菜单项消失。
在CORE.js里便定义了一系列在客户端操作时生成的交互菜单,路径,甚至于导入导出操作等等,有些时候我们不妨通过改变CORE.js来轻松的实现一些小的功能。当然,因为这属于系统本身的库,我们还是建议大多数情况下不要更改。