当你使用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布局。