定位管理员定义的内容部分

时间:2015-09-23 15:32:54

标签: orchardcms orchardcms-1.9

如何使用管理界面(内容定义 - >内容部件)控制我创建的内容部分的位置?确切地说,我想将它隐藏在摘要视图中并仅在细节中显示它。我创建了部件以尝试简化其字段的定位 - 一次显示/隐藏它们,以便可以根据需要轻松管理字段,而无需更改任何其他字段。

我尝试使用placement.info定位零件,甚至尝试添加模板无济于事...我可能错过了零件形状的名称。查看页面的形状跟踪,该部分在模型中无处可见 - 相反,其字段似乎直接添加到内容中。 (更正:它在模型中,但不在左侧的显示树视图中)。

Orchard有办法做到这一点吗?我正在使用最新版本 - 1.9.1。

编辑:

这是我尝试过的placement.info。有问题的内容部分称为FilmData,我在调试器中注意到它确实作为ContentPart的一个实例出现在Parts集合中,但它似乎并没有整个形状跟踪。

<Placement>
    <Place Parts_FilmData="-"/>
    <Place Parts_FilmData_Summary="-"/>
    <Place Parts_FilmDataPart="-"/>
    <Place Parts_FilmDataPart_Summary="-"/>
    <Place Parts_ContentPart="-"/>
    <Place Parts_ContentPart_Summary="-"/>
...

这在摘要和详细视图中均无效。

我还尝试添加一个CSHTML模板并调用它 -

Views\Content-FilmData.cshtml
Views\Content-FilmData.Summary.cshtml
Views\FilmData.cshtml
Views\Parts.FilmData.cshtml
Views\Parts.FilmData.Summary.cshtml
Views\DisplayTemplates\Parts\FilmData.cshtml

......但这些似乎都没有被使用。

这是我在形状跟踪的左框架中得到的...请注意,Parts_Film是一个不同的部分,它是以编程方式创建的。这里可以看到的字段是FilmData部分的字段。

Content
    Parts_Title
[+] Fields_MediaLibraryPicker
    Parts_Film
    Fields_Input
    Fields_Input
    Fields_Input
    Fields_Input
    Fields_Input [empty]
[+] Fields_DateTime
    Fields_TaxonomyField
    Parts_Common_Body
    Parts_Contents_Publish [empty]

1 个答案:

答案 0 :(得分:0)

这里简短的回答是,您尝试做的事情将无法正常工作,因为字段(即使它们附加到特定部分)不会通过该部分显示,因此不会考虑该部分是否显示。

如果您需要它,这是一个更详细的细节......虽然Orchard中的一个部分可以存在于代码之外,它的工作原理(它显示的内容,它存储的数据等)都是在代码中定义的。您需要的一件事是带有显示方法的驱动程序,它将注册内容形状。

protected override DriverResult Display(MyPart part, string displayType, dynamic shapeHelper) {
    return ContentShape("Parts_MyPart",
        () => { return shapeHelper.Parts_MyPartView(Model: part); });
}

因此,“Parts_MyPart”位与展示位置匹配,以决定是否以及在何处显示您的视图,即Parts_MyPartView形状。这一点很重要,因为当您发现尝试各种放置语句时,您实际上可以拥有任何内容(大多数人遵循所有核心部分使用的Orchard惯例)。对于视图,从UI创建部件实际上不会显示任何内容。您尝试的前两个模板(使用Content-前缀)用于覆盖主要内容模板,因此您可以在那里使用您的内容类型名称,而不是部件名称(无耻插件:您可以在一个中阅读更多内容我写得不好的博客文章http://arkleseizure.net/what-the-hell-is-an-item-template)。

希望这有助于澄清一些事情。