0

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

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

有没有办法在果园做到这一点?我正在使用最新的 - 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]
4

1 回答 1

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)。

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

于 2015-09-30T09:25:24.190 回答