OrchardCMS 从形状别名中的 CustomType 对象获取附加的布局部分

OrchardCMS Getting the Attached Layout Part from the CustomType object in a Shape Alias

我正在尝试为我的 Orchard 网站构建一个组件。 我正在使用自定义 ContentType 和形状跟踪。 它的运行完全符合我的预期,但其中一个部分是 LayoutPart。 我用来生成组件的 HTML 结构的所有其他字段。 在它的中心,我打算显示用户放入中间 LayoutPart 的任何内容。

编辑 缺少 Placement.info 文本。 /编辑

ContentType 具有以下字段(我用它来构建 html):

和以下 ContentParts

我需要的是 Model 对象的 LayoutPart,所以我可以将其内容放在 div cshtml 中 BuildDisplay(layoutPart, "DisplayType")

我试过查看文档并使用谷歌搜索。 我怀疑因为我对 Orchard 和 Razor 都不熟悉,所以我还没有正确的词汇。

已修复 谢谢! 这是我的最终代码:

@using Orchard.Utility.Extensions;
@using Orchard.ContentManagement;
@using Orchard.Layouts.Models;
@using Orchard.DisplayManagement.Shapes
@using Orchard.Layouts.Helpers;

@{
var tag = Tag(Model, "div");
    var id = Model.Content.Items[0].Value;
    var css = Model.Content.Items[1].ContentField.Value;
    var nextID = Model.Content.Items[2].ContentField.Value;
    var backgroundPath = Model.Content.Items[3].ContentField.FirstMediaUrl;

    var customstyle = "";

    if (css == "module-hero")
    {
        css = "module-hero fullheight parallax";
        customstyle = "background-image: url(" + backgroundPath + "); background-size: cover; background-attachment: fixed; background-position: center center; background-repeat: no-repeat; ";
    }
    else if (css == "module-sidekick")
    {
        customstyle = "background-image: url(" + backgroundPath + "); background-size: cover; background-position: relative; background-repeat: no-repeat; overflow: hidden;";
    }
}
@tag.StartElement

<div id="@id" style="@customstyle" class="@css">
    <div class="container">
        <div class="row">
            <div class="col-sm-12 m-t-250">
                @Display(Model.ParallaxContent)
                <div class="btn-list">
                    <a href="#@nextID" class="btn btn-outline smoothscroll"><i style="font-size: 60px" class="fa fa-angle-down"></i></a>
                </div>
            </div>
        </div>
    </div>
</div>

@tag.EndElement

<!-- XML -- >
Placement.info 
<Match ContentType="ParallaxModule" DisplayType="Detail">
    <Place Parts_Layout="ParallaxContent" />
</Match>

您正在寻找的是形状重定位。 Sebastien's Harvest 2015 Shapes Talk.

这里有介绍

思路如下:

  • 您想在页面上四处移动某个部分,但不想完全控制它的呈现,您只想将现有位移动到页面上的其他位置。

形状重定位

首先在您的视图中创建一个新区域,将其命名为您喜欢的名称。在您的情况下,它看起来像这样:

<div id="@id" style="background: url(@backgroundPath)" class="@css">
    <div class="container">
        <div class="row">
            <div class="col-sm-12 m-t-250">
                @Display(Model.MyNewCustomLayoutZone)
                <div class="btn-list">
                    <a href="#@nextID" class="btn btn-outline smoothscroll"><i style="font-size: 60px" class="fa fa-angle-down"></i></a>
                </div>
            </div>
        </div>
    </div>
</div>

所以现在您有了一个新区域,您可以使用 placements.info 将其定位为 MyNewCustomLayoutZone

打开主题或模块中的 placements.info 文件并将其添加到其中:

<Match ContentType="MyCustomContentType">
   <Match DisplayType="Detail">
      <Place Parts_Layout="MyNewCustomLayoutZone" />
   </Match>
</Match>

其中 MyCustomContentType 是您对新内容类型的称呼,MyNewCustomLayoutZone 是您在第一步中对新区域的称呼。

如何找到 Parts_Layout 位?

打开形状追踪工具并转到您要四处移动的部分/字段。

在第一个选项卡 Shape 中,您会看到一个 Shape 条目,告诉您这一点。

您实际上可以使用相同的技术在您的字段中移动。

不需要每次都新建一个zone,可以使用已有的如:

<Place Parts_Layout="Footer" />

如果您想在此形状的末尾显示该位。

您还可以将它四处移动成属于较宽页面一部分的形状。这些称为全局区域。例如,如果我创建了一个文本类型的字段并将其称为 FooterText,我可以将其显示在网站底部:

<Place Fields_Common_Text-FooterText="/Footer:after"/>

有关移动内容选项的更多信息在官方文档的 Understanding the placement.info file 部分。

隐藏自定义字段

如果您在主 @Display(Model.Content) 中看到您不想向最终用户显示的自定义字段,您可以简单地使用 placement.info 隐藏它们 -作为目标区域。

这会翻译成这样:

<Match ContentType="MyCustomContentType">
   <Match DisplayType="Detail">
      <Place Fields_Common_Text-ID="-" />
      <Place Fields_NextItem-NextItem="-" />
      <Place Fields_Common_Text-ModuleType="-" />
      <Place Fields_MediaLibraryPicker-BackGroundImage="-" />
   </Match>
</Match>