C# 将形状添加到全局区域,而不是Orchard中的局部区域
问题简而言之: 我已经创建了一个新的内容部分,并希望在另一个区域LeftPanel中显示它,该区域位于主内容区域之外。这不起作用,因为我只能将contentpart添加到内容区域内的本地区域。 如何将contentpart添加到页面上的其他区域 详细解释: 我们的团队创建了一个新的Orchard网站,并为其创建了一个布局。 有几个可用区域,其中大多数区域在所有页面上都可见。这些是主题中可用的所有区域:C# 将形状添加到全局区域,而不是Orchard中的局部区域,c#,orchardcms,C#,Orchardcms,问题简而言之: 我已经创建了一个新的内容部分,并希望在另一个区域LeftPanel中显示它,该区域位于主内容区域之外。这不起作用,因为我只能将contentpart添加到内容区域内的本地区域。 如何将contentpart添加到页面上的其他区域 详细解释: 我们的团队创建了一个新的Orchard网站,并为其创建了一个布局。 有几个可用区域,其中大多数区域在所有页面上都可见。这些是主题中可用的所有区域: 区域:页眉、导航、内容、左面板、右面板、工具栏、消息、地址、页脚、副本 我创建了一个新的con
区域:页眉、导航、内容、左面板、右面板、工具栏、消息、地址、页脚、副本
我创建了一个新的contentpart并将其附加到contenttype页面。使用此contentpart,可以向页面添加横幅。
其实施相当简单,当我把它们放在内容区时,一切似乎都正常工作
我在驱动程序中放置的相关代码如下:
protected override DriverResult Display(BannerPart part, string displayType, dynamic shapeHelper)
{
return ContentShape("Parts_Banner",
() => shapeHelper.Parts_Banner(
FirstImageTitle: part.FirstImageTitle,
FirstImageLocation: part.FirstImageLocation,
FirstImageNavigationUrl: part.FirstImageNavigationUrl,
SecondImageTitle: part.SecondImageTitle,
SecondImageLocation: part.SecondImageLocation,
SecondImageNavigationUrl: part.SecondImageNavigationUrl,
ThirdImageTitle: part.ThirdImageTitle,
ThirdImageLocation: part.ThirdImageLocation,
ThirdImageNavigationUrl: part.ThirdImageNavigationUrl
));
}
<Placement>
<Place Parts_Banner="LeftPanel:1"/>
<Place Parts_Banner_Edit="Content:7"/>
</Placement>
在placement.info文件中包含以下文本:
<Placement>
<Place Parts_Banner="Content:before"/>
<Place Parts_Banner_Edit="Content:7"/>
</Placement>
看起来没有任何效果,它不再呈现在页面上
在研究了一段时间后,我偶然发现了这个问题
我已经使用了IWorkContextAccessor
,但是没有成功地将
LeftPanel
区域中的contentpart。
以下代码不起作用:
protected override DriverResult Display(BannerPart part, string displayType, dynamic shapeHelper)
{
var shape = shapeHelper.Parts_Banner(
FirstImageTitle: part.FirstImageTitle,
FirstImageLocation: part.FirstImageLocation,
FirstImageNavigationUrl: part.FirstImageNavigationUrl,
SecondImageTitle: part.SecondImageTitle,
SecondImageLocation: part.SecondImageLocation,
SecondImageNavigationUrl: part.SecondImageNavigationUrl,
ThirdImageTitle: part.ThirdImageTitle,
ThirdImageLocation: part.ThirdImageLocation,
ThirdImageNavigationUrl: part.ThirdImageNavigationUrl
);
_workContextAccessor.GetContext().Layout["LeftPanel"].Add(shape, 10);
return new DriverResult();
}
看起来Clay正在创建一个具有空属性的新(区域?)对象。不知怎么的,乌节找不到这个区域。我怀疑这与全球区域和本地区域有关,但我当然可能错了
通过区域枚举也不起作用,因为它没有GetEnumerator()方法,这将创建一个异常
foreach (var zone in _workContextAccessor.GetContext().Layout.Zones)
{
_workContextAccessor.GetContext()
.Layout.Zones[zone]
.Add(shape, 1);
}
我可能在Bertrand的帖子中遗漏了什么。我看到他正在创建一个具有Zones属性的模型并使用它,但我不知道该如何工作(即使在查看了他在博客文章中提供的解决方案之后)
内容模板如下所示:
<article class="content-item @contentTypeClassName">
<header>
@Display(Model.Header)
@*@if (Model.Meta != null) {
<div class="metadata">
@Display(Model.Meta)
</div>
}*@
</header>
@Display(Model.Content)
@if(Model.Footer != null) {
<footer>
@Display(Model.Footer)
</footer>
}
</article>
@显示(型号标题)
@*@如果(Model.Meta!=null){
@显示(Model.Meta)
}*@
@显示(Model.Content)
@如果(Model.Footer!=null){
@显示(Model.Footer)
}
我发现当我修改placement.info
以使用内容
或页脚
区域时,它似乎正在工作。然而,这并不十分正确。当我使用Footer:before
符号时,它将横幅放在内容
区域的
之前,因此不会放在真正的Footer
区域之前,后者位于内容
区域之外
关于如何解决此问题的任何建议或解决方案,以便我可以将此contentpart放置到页面上的其他区域?可能的答案(如果没有,至少可能有用):该问题的答案非常有用。同样有用的是randompete在这里的帖子:刚刚遇到这个,看起来MiBu链接中的答案已经过时了。从placement.info:
推送到全局区域的正确语法,其中“Footer”是主题中全局区域的名称,ShapeName是形状的名称。基本上,当您要引用全局区域而不是本地区域时,只需在区域名称的开头添加一个正斜杠。参照“/xxxx”放置规范,将项目放置在全局区域而不是本地区域中,这似乎仅适用于位于主题中的placement.info文件(也就是说,在我写这篇文章的时候,它对模块中的placement.info文件没有影响)。不确定这是一个bug还是一个设计决策,但这是一个值得警惕的问题