我們在SharePoint中自訂菜單,通常通過帶CustomAction 的Feature來實現,比如隱藏一個菜單:<HideCustomAction>
GroupId = "Text"
HideActionId = "Text"
Id = "Text"
Location = "Text">
</HideCustomAction>
自訂一個菜單:<CustomAction
Id="Extend"
Location="Microsoft.SharePoint.Administration.ApplicationManagement"
Sequence="10"
Title="Extend or upgrade virtual server"
Description="">
<UrlAction Url="vslist.aspx?NextPage=extendvsoption.aspx&Show=NeedExtend&Show=NeedUpgrade"/>
</CustomAction>
具體知識請參考SDK或者參考網上的相關文章。
但是。。。。這種方法不是都管用的,比如我要改變文件庫或者列表的ListItem的菜單中的某項或者增加刪除一個菜單等等,通過這種方法是沒有效果的……
這個時候,我們通過javascript來實現就非常容易了,如果您看過core.js的代碼就會發現,MS已經給我們預留了自訂的介面來實現我們自己的菜單定義了,MS想的就是周到哇,嘿嘿……
core.js在路徑C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\下的1033[英文]或者2052[中文]下,我們找到添加文件庫/列表菜單的function
看到了吧我們可以自訂實現Custom_AddDocLibMenuItems(文件庫) / Custom_AddListMenuItems(列表)來添加我們自己的菜單,具體做法是。。。
1)在我們的頁面中加入一個WebPart-內容編輯器組件,然後修改組件屬性,最好將組件設定為隱藏的:
然後點擊“源編輯器...”,輸入我們的自訂javascript指令碼來實現我們自己的菜單:<script language="javascript">
function Custom_AddDocLibMenuItems(m, ctx)
{
strDisplayText = "我的菜單";
var rootMenu = CASubM(m,strDisplayText,"","",500);
strDisplayText = "我的菜單還是我的菜單";
strAction = "STSNavigate('http://www.cnblogs.com')";
strImagePath=ctx.imagesPath+"oisweb.gif";
menuOption = CAMOpt(rootMenu,strDisplayText,strAction,strImagePath);
menuOption.id = "ID_MySubMenu";
return false;
}
</script>
function裡怎麼個寫法可以參照core.js的寫法:) 最後的return false;說明繼續執行系統的代碼,如果return true的話。。。那整個菜單就一個你自己的功能表項目啦。寫完後儲存,然後退出編輯模式來瞧瞧:
如果要去掉某個菜單,比如WorkFlow之類,我比較笨,用了個笨方法,把他內建的AddDocLibMenuItems中的指令碼copy過來,把要去掉的功能表項目給注釋掉,然後最後來個return true;呵呵
個人習慣: