如何在Orchard中覆盖核心公共视图

本文关键字:核心 视图 覆盖 Orchard | 更新日期: 2023-09-27 18:25:43

我正在设计一个使用Orchard的网站,我注意到它们是一个自定义的内容类型,其中有一条消息,这是HTML 中的标准消息

<p>Some text</p>
<p>Some more text</p>

不过,由于Orchard.Core.Common.Views.Fields.Common.Text.cshtml,它在每个</p> 之后插入了一个<br />

这是他们呈现消息的视图

@using Orchard.Utility.Extensions;
@{
    string name = Model.ContentField.DisplayName;
}
@if (HasText(name) && HasText(Model.Value)) {
<p class="text-field"><span class="name">@name:</span> <span class="value">@(new MvcHtmlString(Html.Encode((HtmlString) Model.Value).ReplaceNewLinesWith("<br />")))</span></p>
}

我如何才能覆盖此项?我试图将视图复制并粘贴到我的Themes/view文件夹中,但它似乎没有覆盖它。我只想删除".ReplaceNewLinesWith("<br />")"

如何在Orchard中覆盖核心公共视图

我还没有在Orchard 1.6中尝试过这一点,但它在最新版本(1.8)中运行良好。需要检查的显而易见的事情是,您的主题是活动的,并且您为视图提供了正确的名称。如果您想要全局覆盖,则视图应位于主题视图文件夹的根目录中,名称为"Fields.Common.Text.cshtml".

如果您不想更改所有文本字段的行为,那么您可能需要打开形状跟踪,并为视图找到一个与它所包含的内容类型的字段名称绑定的备用字段(例如"fields.Common.text SomeTextField.cs.html")。这将减少您所做任何更改的影响。

也就是说,你确定你做的是对的吗?如果你的内容包含<p>标签,那么至少在最新版本中,标签会被剥离,这是有道理的,因为否则你最终会得到嵌套的<p>标签:

<p class="text-field"><span class="name">SomeTextField:</span> <span class="value">
    <p>Some text</p>
    <p>Some more text</p></span>
</p>

此外,作为警告,虽然在最新版本的Orchard中肯定可以覆盖此视图,但视图实际上已经更改,因此视图中不再有新行处理。它已移出到过滤器Orchard.Core.Common.Services.TextFieldFilter中。因此,如果网站在未来更新,你可能会发现你需要重新访问该地区。