在MOSS中给增强型RTF字段增加按钮
很多人会抱怨MOSS默认的讨论区比较弱,比起大部分BBS来说,确实少了很多功能。实际上对于MOSS的讨论区来说,已经是一个树型结构了, 我们只要稍加改善,就能够让讨论区更完善一些。
昨天中午和同事讨论起这个话题,认为讨论区只要要改进4个地方:
今天我们就讲讲如何实现第4个,首先看贴图:
![](http://www.oceanstudio.net/oceanstudy/images/MOSSAddButton/1.jpg)
这张图截自我的网站的讨论区, http://www.oceanstudio.net/Lists/SharePoint3/AllItems.aspx,大家可以自己去看实际效果,当然为了防止恶意灌水,本讨论区需要注册。
我的实现方式很简单,讨论区默认的正文输入框是一个增强型的RTF,我做的就是在上面加了一个按钮。
上篇Blog我们曾经讲过,如果要替换掉整个编辑器,我只要重写RTE_ConvertTextAreaToRichEdit()这个函数就可以了。但是有时我只希望增加一两个按钮,如何做呢?
FullHtml,也就是增强型RTF的工具栏的按钮,都在RTE_FullHtmlToolBarDefinitionFactory()这个函数里面定义这,这里面有一个toolbar变量,我们只要在合适 的位置,增加我们的按钮就可以,我把它加入到插入图片的按钮后面,向toolbar加入按钮的时候,首先要生成一个新按钮,按钮有三种:
![](http://www.oceanstudio.net/oceanstudy/images/MOSSAddButton/2.jpg)
//////////////////////自定义按钮/////////////////////////// //增加表情按钮 toolBar.push( new C_RTE_TB_SpecialButton( g_strRTEInsertEmoticonMnemonic, RTE_GenerateInsertEmoticonToolBarButtonHtml, true, new C_RTE_TB_SetEnabledAlways())); ///////////////////////////////////////////////////////////
创建好按钮后,就要生成这个按钮的主体html,这个我们定义一个新函数:RTE_GenerateInsertEmoticonToolBarButtonHtml。生成完按钮主体后, 就要生成那个表情选择器,这个选择器我也创建了一个新函数RTE_DD_OpenInsertEmoticonSelector。选择器实际上有现成的一些函数可以调用。 这个函数就是:RTE_DD_GenerateMenuItemHtml,每个MenuItem就是一个表情按钮。通过这些已经预定好的函数生成选择器后,你会发现你不用去设定位置, 它会自动的在你的按钮的下方出现。
当你的按钮出来之后,你需要做的就是点击按钮返回的动作,这个动作会调用RTE_ExecuteCommandOnSelection这个函数,在这个函数里面,执行了 docEditor.execCommand()函数,执行插入图像的动作,每个表情就是一个图片。
if (strCommand == "InsertEmoticon") { docEditor.execCommand("InsertImage", fUserInterface, RTE_GetServerRelativeImageUrl("Emoticon/" + strValue)); }
这里提醒大家注意一下的就是,我们的toolbar是在一个Iframe里面的,所以点击了表情按钮之后,实际上的函数调用发生在Iframe内部,如果你想让它调用 父框架的函数,那么请使用parent或者top。这个按钮我一共花了3个小时,但是这个小问题就花了我1个小时的时间,之后才恍然大悟想起来表情按钮都是在Iframe中。
当然实际上做一个按钮不需要那么长时间,除了刚刚的那个Iframe问题之外,我还花了一些时间来收集表情图片,并且一个一个的写到数组里面,这个也属于个体力活。
当我们给这个工具栏加上按钮后,那么每个字段,只要采用了增强RTF型,就会有这个插入表情的功能。
本篇blog首发:oceanstudio-blog
欢迎访问海洋工作室