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):
- ID(文本)
- 下一个项目(下一个项目)
- 模块类型(文本)
- 背景图像媒体图像
和以下 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>
我正在尝试为我的 Orchard 网站构建一个组件。
我正在使用自定义 ContentType 和形状跟踪。
它的运行完全符合我的预期,但其中一个部分是 LayoutPart
。
我用来生成组件的 HTML 结构的所有其他字段。
在它的中心,我打算显示用户放入中间 LayoutPart
的任何内容。
编辑 缺少 Placement.info 文本。 /编辑
ContentType 具有以下字段(我用它来构建 html):
- ID(文本)
- 下一个项目(下一个项目)
- 模块类型(文本)
- 背景图像媒体图像
和以下 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>