如何使用放置或模板覆盖在内容编辑器中隐藏零件的一部分?

How to use placement or template overrides to hide part of a Part in a Content Editor?

我正在使用 Orchard 1.9.3 并设置了几个自定义 ContentTypes,它们模仿具有自动路由和布局部分等的标准页面类型。

永远不应将这些类型的页面设置为主页,因此我只想隐藏 Autoroute 部分的 Set as home page 字段,但仅针对我的自定义类型。我不确定最有效的方法是什么。我可以在展示位置文件中专门针对此字段吗?

您可以覆盖 Parts.Autoroute.Edit.cshtml 并包含一些自定义逻辑:

@{
    var canSetAsHomePage = true;
    var myTypesToDisableHomePageFor = ["MyCustomContentType", "AnotherCustomContentType"];
    if (myTypesToDisableHomePageFor.Contains(Model.ContentType)) {
        canSetAsHomePage = false;
    }
}

// ..

@if (!Model.IsHomePage && canSetAsHomePage) {
    if (AuthorizedFor(Permissions.SetHomePage)) {
// ..

为此,您还必须向 Orchard.Autoroute.ViewModels.AutoroutePartEditViewModel 添加一个额外的 属性:

public class AutoroutePartEditViewModel {
    ...
    public string ContentType { get; set; }
}

并确保在 Orchard.Autoroute.Drivers.AutoroutePartDriverEditor 方法中设置它:

var viewModel = new AutoroutePartEditViewModel {
    CurrentUrl = part.DisplayAlias,
    Settings = settings,
    ContentType = part.ContentItem.ContentType
};