2016-12-06 21 views
0

我使用乌节1.9.3,并建立了几个模仿标准的页面类型与自动布线和布局等部分如何使用展示位置或模板覆盖来隐藏内容编辑器中零件的一部分?

这些类型的网页不应该被设置为主页自定义CONTENTTYPES的,所以我只想隐藏Autoroute零件的Set as home page字段,但仅用于我的自定义类型。我不确定最有效的方法是什么去做这件事。我可以专门在展示位置文件中定位此字段吗?

+0

您无法使用Placement.info开箱即用,但您可以覆盖[Parts.Autoroute.Edit.cshtml](https://github.com/OrchardCMS/Orchard/blob/dev/src/Orchard.Web /Modules/Orchard.Autoroute/Views/EditorTemplates/Parts.Autoroute.Edit.cshtml)来包含你的逻辑。 – devqon

回答

1

可以覆盖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; } 
} 

,并确保其设置在Editor方法Orchard.Autoroute.Drivers.AutoroutePartDriver

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

谢谢你的清晰和明确的例子! – Lawyerson

+0

其实,你能帮我把这个重写放在哪里吗?无论我尝试将它放在哪里,模块/视图/编辑器模板,主题/视图/编辑器模板,视图/零件/ Autoroute.Edit等等似乎都不会被拾取。此外,似乎没有是模型中的ContentType的引用,所以为了这个工作,我想我还必须扩展驱动程序呢? – Lawyerson

+1

我不确定如何获取ContentType,您必须检查“Model”变量。如果你对你的module.txt中定义的Orchard.Autoroutes有依赖性,那么这个视图应该可以覆盖你的模块。 – devqon

相关问题