在Sitecore内容编辑器的自定义字段中打开富文本编辑器

时间:2012-02-17 18:40:10

标签: sitecore

我正在Sitecore中为内容编辑器实现自定义字段,我需要能够打开Rich Text编辑器并从那里获取数据。我不确定在哪里看,也不知道如何去做。

1 个答案:

答案 0 :(得分:2)

必须反编译Sitecore.Kernel DLL才能解决这个问题。

首先是从Context.ClientPage对象

中分离出来的电话

所以,对于我的情况:

switch (message.Name)
{
    case "richtext:edit":
        Sitecore.Context.ClientPage.Start(this, "EditText");
        break;
}

然后,您需要在类中使用与上述Start方法中定义的名称相同的方法。然后,如果请求不是回发,则启动富文本控件,或处理发布的数据

protected void EditText(ClientPipelineArgs args)
{
    Assert.ArgumentNotNull(args, "args");
    if (args.IsPostBack)
    {
        if (args.Result == null || args.Result == "undefined")
            return;
        var text = args.Result;
        if (text == "__#!$No value$!#__")
            text = string.Empty;
        Value = text;
        UpdateHtml(args); //Function that executes Javascript to update embedded rich text frame
    }
    else
    {
        var richTextEditorUrl = new RichTextEditorUrl
                                    {
                                        Conversion = RichTextEditorUrl.HtmlConversion.DoNotConvert,
                                        Disabled = Disabled,
                                        FieldID = FieldID,
                                        ID = ID,
                                        ItemID = ItemID,
                                        Language = ItemLanguage,
                                        Mode = string.Empty,
                                        Source = Source,
                                        Url = "/sitecore/shell/Controls/Rich Text Editor/EditorPage.aspx",
                                        Value = Value,
                                        Version = ItemVersion
                                    };
        UrlString url = richTextEditorUrl.GetUrl();
        handle = richTextEditorUrl.Handle;
        ID md5Hash = MainUtil.GetMD5Hash(Source + ItemLanguage);
        SheerResponse.Eval("scContent.editRichText(\"" + url + "\", \"" + md5Hash.ToShortID() + "\", " +
                            StringUtil.EscapeJavascriptString(GetDeviceValue(CurrentDevice)) + ")");
        args.WaitForPostBack();
    }