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

时间:2014-10-07 08:35:19

标签: c# model-view-controller orchardcms orchardcms-1.6

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

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

这很好,但是感谢Orchard.Core.Common.Views.Fields.Common.Text.cshtml它在<br />之后插入</p>

以下是他们提供信息的视图

@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 />")"

1 个答案:

答案 0 :(得分:0)

我还没有尝试使用Orchard 1.6,但是最新版本(1.8)可以正常使用。要检查的显而易见的事情是,您的主题是活动的,并且您为视图提供了正确的名称。如果您想要全局覆盖,那么View应位于主题View文件夹的根目录中,名称为&#39; Fields.Common.Text.cshtml&#39;。

如果您不想更改所有文本字段的行为,那么您可能需要打开形状跟踪并找到与该字段关联的视图的替代项它包含的内容类型的名称(例如&#39; Fields.Common.Text-SomeTextField.cshtml&#39;。这将减少您所做的任何更改的影响。

那就是说,你确定你做的正确吗?如果您的内容包含<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中。因此,如果该网站将来更新,您可能会发现需要重新访问该区域。