0

我正在 Orchard CMS 1.7.1 中创建一个自定义模块

到目前为止一切顺利(ish)

我的一个属性是一个字符串(称为 InfoBubbleHtml)。

我想在我的模块创建/编辑表单上为此输入使用富文本编辑。

是否已经有一个助手可以将我的属性呈现为富文本区域而不仅仅是一个textareainput字段?

如果没有,我需要做什么才能让这个属性呈现富文本编辑器?

提前致谢。

更新

作为此问题的更新/补充...我在当前文本区域中输入的任何 HTML 都将被忽略;猜测与请求验证有关。如何为我的控制器禁用此功能,以便我可以在管理员中允许 html?

更新 2

好的,所以我想出了如何使用以下方法将其添加到我的视图中:

@Display.Body_Editor(Text:Model.InfoBubbleHtml,EditorFlavor:"html")

知道如何设置编辑器的ID吗?

4

2 回答 2

1

@Display.Body_Editor(Text:Model.InfoBubbleHtml,EditorFlavor:"html") 正在渲染一个名为 Body.Editor.cshtml 的形状。

该文件位于:Orchard.Web\Core\Common\Views\Body.Editor.cshtml

它的内容是

@using Orchard.Utility.Extensions;
@{
    string editorFlavor = Model.EditorFlavor;
}
@Html.TextArea("Text", (string)Model.Text, 25, 80, new { @class = editorFlavor.HtmlClassify() })

所以使用这个Shape你不能设置Id,Model是你在Display上发送的anon(Text和EditorFlavor)。

Orchard.Core/Common 上的 Shapes.cs 正在使用 EditoFlavor 字符串连接替代品。

 public void Discover(ShapeTableBuilder builder) {
            builder.Describe("Body_Editor")
                .OnDisplaying(displaying => {
                    string flavor = displaying.Shape.EditorFlavor;
                    displaying.ShapeMetadata.Alternates.Add("Body_Editor__" + flavor);
                });
        }

所以最终呈现的文件:TinyMVC\Views\Body-Html.Editor.cshtml

使用 Orchard.Environment.Descriptor.Models

@{
    var shellDescriptor = WorkContext.Resolve<ShellDescriptor>();
}

<script type="text/javascript">
    var mediaPickerEnabled = @(shellDescriptor.Features.Any(x => x.Name == "Orchard.MediaPicker") ? "true" : "false");
    var mediaLibraryEnabled = @(shellDescriptor.Features.Any(x => x.Name == "Orchard.MediaLibrary") ? "true" : "false");
</script>

@{
    Script.Require("OrchardTinyMce");
    Script.Require("jQueryColorBox");
    Style.Require("jQueryColorBox");
}

@Html.TextArea("Text", (string)Model.Text, 25, 80,
         new Dictionary<string,object> {
                {"class", "html tinymce"},
                {"data-mediapicker-uploadpath",Model.AddMediaPath},
                {"data-mediapicker-title",T("Insert/Update Media")},
        {"style", "width:100%"}
         })

您需要将此添加到模板中,并在 TextArea Dictionary 参数中包含另一个参数,名为:{"id", "THE ID YOU LIKE"}。

如果您想了解更多信息,请查看有关 Shapes 的文档

于 2013-11-03T21:25:37.087 回答
0

您可以修补TinyMVC\Views\Body-Html.Editor.cshtml文件以使其能够为文本区域使用自定义名称/ID。修改很简单——替换

@Html.TextArea("Text", (string)Model.Text, 25, 80,

@Html.TextArea((string)Model.PropertyName ?? "Text", (string)Model.Text, 25, 80,

现在您可以在调用中使用附加参数PropertyName

@Display.Body_Editor(PropertyName:"InfoBubbleHtml", Text:Model.InfoBubbleHtml, EditorFlavor:"html")

缺点是您正在修补外部代码,并且每次更新 TinyMVC 模块中的此文件时都必须重新应用此补丁。

于 2015-03-11T09:01:49.490 回答