SP2010:从Ribbon功能区移除操作

        当你使用SP2010,往富HTML编辑器中输入文本时,你得到丰富的功能区体验。使用这些功能区,你可以做很多事情,如格式化文本。


        这对内容编辑器Web部件有效,以及HTML内容域,如网站列,或者内容类型列。

        编辑器包含许多组(字体、段落等),每个组里都有不同的操作,像Bold、Italic、Underline等等。

        添加项目时,可以使用DeclarativeXML创建自定义操作,本专栏有相应文章。

        如果要移除一些操作或组时怎么办呢?

        或者针对不同母版页和(或)页面布局,你需要给不同页面类型去掉操作(或组)呢?

        下面是一些C#代码,使用SP API允许你完成这个任务。

基本步骤:

1.      创建VS项目

2.      打开Web UserControl项目类型

3.      添加C#代码,隐藏选项卡

4.      在母版页添加这个用户控件的一个引用

1.      创建VS项目

        (非常酷)新的VS2010 IDE有许多SP相关的项目类型。

A.     打开VS2010,新建项目

B.     选择SP2010组

C.     选择空白SP项目,命名为SPR.Utilities

D.     选择部署为场解决方案,完成。

2.      添加映射文件夹。

        现在我们需要添加代码到Ribbon Item Hider----实际上我们不需要feature----只需要能添加到CONTROLTEMPLATES文件夹的东西----在14中----SP根文件夹。

A.     右击跟项目节点(解决方案管理器的黑体文字)

B.     添加SP映射文件夹


C.     展开TEMPLATE文件夹

D.     点击CONTROLTEMPLATES,确定

        这样增加了一个地址,我们可以添加项目代码和ASCX(web用户控件)

        我们仍然需要一个子文件夹----否则代码片会在同一个文件夹中,作为SP OOTB 项目----那个文件夹有超过90个项目呢。

E.      右击CONTROLTEMPLATES文件夹----点击添加---文件夹

F.      改名为SPR.Utilities。

3.      添加web用户控件项目

A.     右击SPR.Utilities文件夹

B.     添加----新建项

C.     在SP2010组,选择用户控件项目

D.     重命名为RibbonItemHider。

4.      添加代码—耶耶

        用户控件放在SP母版页上,因此,总有SPContext和SPRibbon对象可用。

        我们真的只需要做下面的逻辑:

A.     在页面上建引用到SPRibbon对象

B.     隐藏我们不想展示的项目

C.     没啦!!!

        需要添加引用到下面的DLL----在添加引用后粘贴这个路径。

        C:\Program Files\CommonFiles\Microsoft Shared\Web ServerExtensions\14\ISAPI\Microsoft.Web.CommandUI.dll

        在Page_Load事件中,添加如下代码:

        你在SPRibbon下会得到一些波浪线,只需点击Ctrl+.,并选择添加using语句,如下:


        很明显,你可能会想到,在TrimById方法中,并没有包含xxxxxxxxxxxx,这将与下面文件的一个进入点有关:C:\Program Files\Common Files\Microsoft Shared\Web ServerExtensions\14\TEMPLATE\GLOBAL\XML\CMDUI.XML。

A.     在IE中打开这个文件----很大的哦

B.     搜索“Ribbon.EditingTools.CPEditTab.Groups”

C.     子节点是你感兴趣的那些----GROUP节点的集合

D.     这些组应该很熟悉----它们与功能区上的窗格有关:

        a.      Ribbon.EditingTools.CPEditTab.EditAndCheckout

        b.      Ribbon.EditingTools.CPEditTab.Clipboard

        c.      Ribbon.EditingTools.CPEditTab.Font

        d.      Ribbon.EditingTools.CPEditTab.Paragraph

        e.      Ribbon.EditingTools.CPEditTab.Styles

        f.       Ribbon.EditingTools.CPEditTab.Layout

        g.      Ribbon.EditingTools.CPEditTab.Markup

E.      使用这些ID可以隐藏功能区


        并且,进一步,你可以隐藏单个按钮----不只是整个组。

        在GROUP节点中,有控件集合。如果我们把CPEditTab.Font节点展开,你会发现屏幕上显示的所有按钮。


        所以----隐藏Bold、Underline和Italic按钮的代码—是:

  ribbon.TrimById("Ribbon.EditingTools.CPEditTab.Font.Bold");

  ribbon.TrimById("Ribbon.EditingTools.CPEditTab.Font.Italics");

  ribbon.TrimById("Ribbon.EditingTools.CPEditTab.Font.Underline");

        简单吗?我们这就投入使用。

F.      部署并使用控件

        a.      右击项目节点,选择部署

        然后我们需要从母版页引用控件

        b.      使用SPD2010 打开你选择的母版页

        c.      在顶部添加下列标签

<%@ Register TagPrefix="SPR"TagName="RibbonItemHider"src="~/_controltemplates/SPR.Utilities/RibbonItemHider.ascx" %>


        现在我们只需在母版页某处使用这个标签。我在紧跟<body>后添加如下代码,保证把它添加到HTML body中,而不是HEAD部分

<SPR:RibbonItemHider id="RibbonItemHider" runat="server"/>

G.     测试一下

        返回SP—改变母版页为你刚编辑的,你会看到功能区被隐藏了。


H.     结语

        使用同样的框架,可以隐藏其他功能----如果你需要限制编辑者、作者等的权限的话。

        a.      移除编辑HTML按钮---不让内容作者搞乱它。

        b.      移除SuperScript和SubScript----和(或)Strikeout

        c.      移除段落选项卡,强制使用CSS布局。

posted @ 2014-03-18 11:40  crazygolf  阅读(229)  评论(0编辑  收藏  举报