完全自定义sharepoint列表的下拉菜单

来源:互联网 发布:淘宝店铺退货率 编辑:程序博客网 时间:2024/05/16 19:55
其实估计好多人都知道这个, 嗯

这个下拉菜单就是默认sharepoint列表里那个包含"查看", "编辑", "删除"之类的菜单
这个东西是完全在前台实现的, 并且sharepoint提供了js接口去修改它
方法就是在这个webpart之前插入一段js
比如如果自定义文档库列表的话, 就放一个Custom_AddDocLibMenuItems方法
如果是普通列表的话, 就放一个Custom_AddListMenuItems方法
举个例子来说:
<script language='javascript'>
function Custom_AddListMenuItems(m, ctx)
{
var menuOption;
strDisplayText
="Show Hoho";
strAction
="javascript:alert('hoho')";
strImagePath
=ctx.imagesPath+"exptitem.gif";
menuOption
=CAMOpt(m, strDisplayText, strAction, strImagePath, null, 550);
menuOption.id
="ID_Custom";
return true;
}
script> 
 

这个方法会去掉下面webpart的默认菜单项, 并且添加一个Show Hoho菜单项, 点击后alert
CAMOpt是内置的创建菜单项的方法
第二个参数指定名称, 第三个指定一个action(javascript函数), 第三个指定image(没有写"")
第四个指定image的alt属性(我猜), 第五个是菜单项的顺序编号(我继续猜)
如果Custom_AddListMenuItems返回true, 那么不会创建默认的那些菜单项
如果返回false或者不些return语句, 默认的那些菜单项还在

这样我们就可以几乎完全自己定制这个菜单了
有几个地方目前我没想好怎么解决:
1. 这个只适用于普通列表和文档库
    如果是文档或者列表条目的版本的话, 好像没有接口
    如果列表是Meeting(template=200), 好像也没有接口
2. 通过feature加的菜单项没有提供接口把它去掉
3. 如果页面中有多个webpart, 会比较麻烦(其实也能区分出来,见后文)

创建菜单项还有很多乱七八糟的东西
有几个内置的js文件可以参考一下, 它们都在layouts/2052下
ows.js: 创建菜单项主要是在这里完成的, 在4400行左右的那一大片函数
menu.js: 实际创建出菜单项是在这里, 比如上面那个CAMOpt方法
init.js: 这里面包含context的定义(1308行), 这个context就是Custom_AddListMenuItems参数的那个ctx, 里面有很多可以用到的属性, 比如列表, 视图等(但是是GUID而不是名称), 可以根据这两个东西把页面上的多个webpart区分出来, 另外还包含当前用户的id,查看编辑页面的Url等等

如果需要在创建过程中判断权限, 可以使用HasRights方法
参数是权限的高4字节和低4字节(这个数字我没有核实, 但是我猜和SPBasePermission枚举里的数字是一致的)
权限这个数字是long(8字节)类型的, full permission mask是0x7fffffffffffffff
需要注意的是, 当前用户在这个列表条目上的permission mask是直接写在页面的html里的, 在菜单容器那个table的Perm属性
这个table还包括了很多很多属性, 比如用的是哪一个context, 它的内容类型, 列表条目的id, 它的url, 还有一些我不知道是什么东西的东西
原创粉丝点击