在SharePoint列表/文档库中隐藏新建/操作/上载/设置菜单

时间:2009-07-22 15:35:18

标签: sharepoint menu wss hide toolbar

如何在SharePoint中的列表或文档库中隐藏“新建”/“操作”/“上载/设置”菜单?请注意,我需要能够隐藏特定列表定义(模板)的这些菜单,而不仅仅是所有列表或文档库。

我知道的一种可能的方法是注册a,并将ControlClass元素设置为从WebControl继承的控件。在WebControl中,我可以覆盖OnPreRender,然后执行此操作:

foreach (Control control in this.Parent.Controls)
{
    if (control.ToString() == "Microsoft.SharePoint.WebControls.NewMenu")
    {
        control.Visible = false;
    }

    // etc
}

这非常hacky,我只是想知道是否有更好的方法吗?

4 个答案:

答案 0 :(得分:1)

您可以使用属于SharePoint 2007功能Codeplex项目的工具栏管理器Web部件来实现此目的。 http://features.codeplex.com/

您需要将Web部件添加到每个视图网页,但它允许您隐藏菜单项而无需编码。

如果某些用户需要该菜单项,请授予他们添加个人视图的权限。创建个人视图时,默认情况下不会安装Web部件。同样,您将需要禁止不应访问菜单项的用户的个人视图。

答案 1 :(得分:0)

JavaScript可能是您的最佳选择。只需修改并在主页面中引用此代码:

hideListViewToolbarItems("list settings","document library settings","create column","open with windows explorer");

function hideListViewToolbarItems()
{      
    var menuItem;         
    var menuItemName;
    var menuItemIndex=-1;
    var menuItemNames=new Array("edit in datasheet","open with windows explorer",
    "connect to outlook",'export to spreadsheet','view rss feed','alert me'
    ,"create column","settings:create view","list settings",
    "document library settings","explorer view","all documents",
    "all items","modify this view","view:create view","new document",
    "new item","new folder","upload document","upload multiple documents");
    var menuItems = new Array("EditInGridButton","OpenInExplorer","OfflineButton",
    "ExportToSpreadsheet","ViewRSS","SubscribeButton","AddColumn",
    "AddView","ListSettings","ListSettings","View1","DefaultView",
    "DefaultView","ModifyView","CreateView","New0","New0",
    "NewFolder","Upload","MultipleUpload");              
    var allMenuItems = document.getElementsByTagName('ie:menuitem');
    for(var i = 0; i < hideListViewToolbarItems.arguments.length; i++ ) 
    {                                                                           
          menuItemName= hideListViewToolbarItems.arguments[i].toLowerCase();
          for (j=0; j < menuItemNames.length; j++)
          {
               if(menuItemNames[j]==menuItemName)
               {                                     
                     menuItemIndex = j;
                     break;
               }
          }           
          menuItem=menuItems[menuItemIndex];
          for (var l = 0; l < allMenuItems.length; l++)
          {                  
               if(menuItemName.indexOf(":")!=-1)
               {
                         menuItemName = menuItemName.split(":")[1];
               }
               if (allMenuItems[l].id.indexOf(menuItem)!=-1 
                && allMenuItems[l].text.toLowerCase() == menuItemName )
               {                  
                     // For FireFox Compatibility
                     var parentNodeOfMenuItem = allMenuItems[l].parentNode;
                     parentNodeOfMenuItem.removeChild(allMenuItems[l]);
               }
          }                  
    }
}

答案 2 :(得分:0)

我刚刚写了一篇博客文章here,它为你隐藏了按钮。希望它有所帮助。

答案 3 :(得分:0)

如果您的列表中没有任何非隐藏内容类型,“新”按钮将自动消失。