惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
TaoSecurity Blog
TaoSecurity Blog
H
Heimdal Security Blog
Help Net Security
Help Net Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Microsoft Azure Blog
Microsoft Azure Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
N
News | PayPal Newsroom
V2EX - 技术
V2EX - 技术
博客园 - 【当耐特】
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Secure Thoughts
C
CERT Recently Published Vulnerability Notes
罗磊的独立博客
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy & Cybersecurity Law Blog
有赞技术团队
有赞技术团队
S
Schneier on Security
S
SegmentFault 最新的问题
Google Online Security Blog
Google Online Security Blog
H
Hacker News: Front Page
The Last Watchdog
The Last Watchdog
Schneier on Security
Schneier on Security
PCI Perspectives
PCI Perspectives
IT之家
IT之家
Project Zero
Project Zero
博客园 - 司徒正美
P
Privacy International News Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Jina AI
Jina AI
Security Latest
Security Latest
Hacker News - Newest:
Hacker News - Newest: "LLM"
腾讯CDC
C
CXSECURITY Database RSS Feed - CXSecurity.com
阮一峰的网络日志
阮一峰的网络日志
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
V
Vulnerabilities – Threatpost
W
WeLiveSecurity
NISL@THU
NISL@THU
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
L
Lohrmann on Cybersecurity

博客园 - Michael Zhang

MacBook Home End SLES Install cucumber soapui test web services S/4 HANA Solution Manager Linux下创建新用户 su with hyphen and without - su带横杠和不带横杠 2008 R2中的无线连接 wireless 不实用,还小有点意思-IE6 UI测试中的小发现 [转载]一个回收站小工具---RecycleBin Gotcha 尝试改变Survey完成后的默认行为(JavaScript) SharePoint开发中的小点滴 Document Library的URL 添加新的站点栏目类型(New Custom Field (Column) Type) 从WSS 3.0到MOSS 2007 WSS文档库备份及复制 如何备份sharepoint中的文档库? Document Library中Server Menu问题(New和Upload菜单消失) 站点迁移 从单机到服务器场 从上海到大连 又出现两个问题 关于Alert和WebDAV Sharepoint 2007 Forms认证与File Not Found错误
完全控制SharePoint站点菜单(Get full control of SharePoint ActionMenus) Part 1
Michael Zhang · 2009-01-23 · via 博客园 - Michael Zhang

用户在浏览SharePoint 2007界面时,会使用到众多的菜单和链接,比如Library上面的ToolbarMenu (新建,上传,设置等),点击文件或文件夹时的js菜单,Site Settings下的链接等,这些菜单和链接为用户提供了便利的功能入口.(当然频繁的点击和跳转也为人诟病,相信在下一个版本中会改善).本系列将试图全方位介绍定制这些菜单和链接的方法.

 第一部分  ToolbarMenu, Library上方的菜单, 如下图

SharePoint Toolbar Menu

定制这些菜单有三种方法,最近跟Edit in Datasheet菜单打交道较多,下面就隐藏某个菜单,修改已有菜单和添加新菜单放入方法详细分析.

方法一: 使用JavaScript. JavaScript在这里的功能比较有限,可以隐藏或者修改菜单的属性.

上图中所有菜单项在HTML源码均有ID,例如Edit inDatasheet的ID通常是*EditInGridButton,根据DOM模型,可以找到相应的菜单对象(ie:menuitem).

js:

var menus = document.getElementsByTagName("ie:menuitem");

for (var i = 0; i < menus.length; i++) {
    item = menus(i)
    if (item.id.match("EditInGirdButton")!=null)
    {

      //在这里填写你的代码, 隐藏或者改变菜单的事件
    }
}

其他的ID还有OpenInExplorer,ExportToSpreadsheet等,可以在%WSS_Install%\12\TEMPLATE\CONTROLTEMPLATES\DefaultTemplates.ascx找到更多.

可以做一个自己的webpart或者用Content Editor Webpart,把最终的JS放进去, 然后最小化隐藏.

方法二: 使用Web User Control (ascx)

刚刚提到DefaultTemplates.ascx,这个文件包含了ToolbarMenu的定义, 我们可以在这个文件基础上添加删除和菜单(还有找到通过这种方法修改某个菜单,SharePoint封装Orz).

拷贝一个DefaultTemplates.ascx的副本, 重命名为CustomTemplates.ascx,SharePoint会自动加载CONTROLTEMPLATES文件夹下的用户控件.

文件里内容SharePoint:RenderingTemplate标签下的SharePoint:FeatureMenuTemplate标识了一个下拉区域,里面包括了多个MenuItemTemplate.

如果要添加或删除菜单项, 把要修改的区域的xml文件放到CustomTemplates.ascx.下面的xml部分只留下了Edit In Datasheet菜单项和一个自己添加的菜单项.

<SharePoint:RenderingTemplate ID="ToolbarActionsMenu" runat="server">
 <Template>
  <SharePoint:FeatureMenuTemplate runat="server"
   FeatureScope="Site"
   Location="Microsoft.SharePoint.StandardMenu"
   GroupId="ActionsMenu"
   UseShortId="true"
   >
   <SharePoint:MenuItemTemplate
    ID="EditInGridButton"
    ImageUrl="/_layouts/images/menudatasheet.gif"
    PermissionsString="UseRemoteAPIs"
    MenuGroupId="200"
    Sequence="200"
    UseShortId="true"
    runat="server"/>   <SharePoint:MenuItemTemplate
    ID="MyMenu" Text="Show My Menu"
    ImageUrl="/_layouts/images/menudatasheet.gif"
    PermissionsString="UseRemoteAPIs"
    MenuGroupId="200"
    Sequence="201"
    UseShortId="true"
    runat="server"/>
  </SharePoint:FeatureMenuTemplate>
 </Template>
</SharePoint:RenderingTemplate>

效果图:

方法三: 使用Feature. 这也是推荐的方法,非常强大,不过不能很直接的修改和隐藏菜单,需要编程.

添加菜单项:

  <CustomAction
      Id="MWZDMS.ShowRefs"
      RegistrationType="FileType"
      RegistrationId="dwg"
      Location="EditControlBlock"
      Sequence="1001"
      ImageUrl="/_layouts/images/icdwg.gif"
      Title="Show References">
    <UrlAction Url="javascript:window.open('/mwzdms/ShowRefs.aspx?DrawingID='+escapeProperly('{ItemUrl}')+window.location.search.substring(window.location.search.indexOf('&amp;View=')), '_blank', 'width=850, height=400')" />
  </CustomAction>

当需要添加Url逻辑复杂或者隐藏,修改已有菜单项, 可通过ControlClass控制:

  <CustomAction Id="MWZBulkEditList"
    ControlAssembly="MWZDMS.SharePoint.ActionMenu, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5"
    ControlClass="MWZDMS.SharePoint.ActionMenu.BulkEditDrawings"
    GroupId="ActionsMenu"
    Location="Microsoft.SharePoint.StandardMenu"
    Sequence="100"
    ImageUrl="/_layouts/images/menudatasheet.gif"
    Title="Bulk Edit Attributes"
    Description="Edit drawings' attributes inside a MWZ Control">
  </CustomAction>

代码如下:

        protected override void CreateChildControls()
        {
            MenuItemTemplate bulkEditList = new MenuItemTemplate();
            bulkEditList.Text = "Bulk Edit Attributes";
            bulkEditList.Description = "Edit drawings' attributes inside a MWZ Control";
            bulkEditList.ID = "MWZBulkEditList";
            bulkEditList.ImageUrl = "/_layouts/images/menudatasheet.gif";
            string rootFolder = SPContext.Current.List.RootFolder.ServerRelativeUrl;
            string requestUrl = SPContext.Current.Web.ServerRelativeUrl + "/_layouts/mwzdms/bulkedit.aspx?List=" + SPEncode.UrlEncode(SPContext.Current.ListId.ToString("B").ToUpper()) + "&RootFolder=" + SPEncode.UrlEncode(rootFolder) + "&Source=" + SPEncode.UrlEncode(Page.Request.Url.ToString());
            bulkEditList.ClientOnClickScript = "window.location = '" + requestUrl + "';";
            this.Controls.Add(bulkEditList); //添加菜单项
        }

如果想修改或隐藏其他菜单, 可以通过This.Parent.Controls获得其他菜单.

除夕前仓促赶制,欢迎大家通过留言交流.

年后写第二部分, EditControlBlock(ECB), 文件或文件夹菜单项, 也是三种方法.