如何使用放置或模板覆盖在内容编辑器中隐藏零件的一部分?
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.AutoroutePartDriver
的 Editor
方法中设置它:
var viewModel = new AutoroutePartEditViewModel {
CurrentUrl = part.DisplayAlias,
Settings = settings,
ContentType = part.ContentItem.ContentType
};
我正在使用 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.AutoroutePartDriver
的 Editor
方法中设置它:
var viewModel = new AutoroutePartEditViewModel {
CurrentUrl = part.DisplayAlias,
Settings = settings,
ContentType = part.ContentItem.ContentType
};