自定义Sitecore RichTextEditor以添加默认包装器

自定义Sitecore RichTextEditor以添加默认包装器,sitecore,sitecore7,rich-text-editor,Sitecore,Sitecore7,Rich Text Editor,前端(html和css)的设置方式是,对于Sitecore内容字段中的描述文本,需要在其周围缠绕一个标记 因此,默认情况下,RTE将文本包装为标记=TRUE。但问题是,你需要点击回车键或复制/粘贴多个段落 如果只有一行,我们如何强制Sitecore添加p标记?幸运的是,在dll中,有一个特定的函数吸引了我的注意: 受保护的虚拟void SetupScripts() { foreach(Factory.GetConfigNodes(“clientscripts/htmleditor/script”

前端(html和css)的设置方式是,对于Sitecore内容字段中的描述文本,需要在其周围缠绕一个
标记

因此,默认情况下,RTE将文本包装为
标记=TRUE。但问题是,你需要点击回车键或复制/粘贴多个段落


如果只有一行,我们如何强制Sitecore添加p标记?

幸运的是,在dll中,有一个特定的函数吸引了我的注意:

受保护的虚拟void SetupScripts()
{
foreach(Factory.GetConfigNodes(“clientscripts/htmleditor/script”)中的XmlNode节点)
this.Result.Scripts.AppendFormat(“\n”,(object)XmlUtil.GetAttribute(“src”,node),(object)XmlUtil.GetAttribute(“language”,node));
}
很好,嗯?SITECORE的开发者毕竟很聪明。 所以我在web.config中做了这个


并从EditorWindow.aspx中重写
scSendRequest
函数

window.scSendRequest=函数(evt,命令){
var editor=scRichText.getEditor();
if(editor.get_mode()==2){//if处于HTML编辑模式
editor.set_mode(1);//将mode设置为Design
}
var htmls=editor.get\u html(true);
var regex=/]*>.*i;
var match=regex.exec(htmls);
if(match==null&&htmls!=null){
htmls=“”+htmls+”

”; } //$(“EditorValue”).value=editor.get_html(true); $(“EditorValue”).value=htmls; scForm.browser.clearEvent(evt); postRequest(“,”,“,命令); 返回false; }

是的。。double rainbow and unicorn.

您也可以为这一需求创建自己的定制解决方案。 您可以在中创建新的管道事件

  • 管道-当您在sitecore的富文本编辑器中点击save时,这可以使您附加标记
  • 管道-如果原始rtf文本中没有标记,则可以在呈现页面时动态地将文本包装到

    标记中

如果您选择方法1:

您可以在web.config中添加到管道:


您可以使用以下相应的代码:

名称空间Sitecore72.class
{
公共类WraprichtParagraphSave
{
公共作废进程(SaveRichTextContentArgs-args)
{
if(!(args.Content.Trim().StartsWith(“”)&&args.Content.Trim().EndsWith(“

”)) args.Content=“”+args.Content+”

”; } } }
请注意,只有在使用富格文本字段的“显示编辑器”按钮时,才会触发此管道:

如果您选择方法2:

要附加到此管道,请使用以下配置:


您可以使用以下相应的代码:

名称空间Sitecore72.class
{
公共类wraprichtParagraphonRender
{
公共作废流程(RenderFieldDargs args)
{
if(args.FieldTypeKey==“富文本”&&&!(args.Result.FirstPart.Trim().StartsWith(“”&&args.Result.FirstPart.Trim().EndsWith(“

”)) args.Result.FirstPart=“”+args.Result.FirstPart+”

”; } } }

对于这两种情况,请确保添加对Sitecore.Kernel.dll和HtmlAgilityPack.dll的引用。sitecore软件包解决方案提供了这两种功能。

在这两种情况下,我会检查的不仅仅是段落标记,还有其他元素,如表格、div、ol和ul。EditorWindow.aspx对我不起作用。我不得不向EditorPage.aspx添加相同的覆盖