【发布时间】:2016-03-17 15:59:51
【问题描述】:
我们网站的一部分具有深度 IA。顶部是一个页面,它的右栏将添加许多组件。该首页下的大部分子页面将具有相同的右栏组件,因此我的任务是查看从该页面继承的渲染。更一般地说,我正在尝试编写一个执行以下伪代码的函数:
If using inheritance {
Get Renderings from given placeholder on an item
Add those renderings to a placeholder on the fly at run-time
} else {
render out components as normal
}
请注意,我不想将它们持久化到数据存储中,我只想动态添加它们,因为如果有人实际将渲染添加到当前项目,则该项目的继承将停止。或者,如果有人更改了顶部的渲染,那也应该向下传播给孩子。
我有一些代码可以让我从给定的占位符渲染引用(从堆栈溢出中提取):
var renderingReferences = inheritFrom.Visualization.GetRenderings(Sitecore.Context.Device, true);
var renderingsInPlaceholder = renderingReferences.Where(r => r.Placeholder.EndsWith('/' + placeholder, StringComparison.OrdinalIgnoreCase));
但是,我在找出如何将 renderingReference 项添加到子页面上的占位符时遇到了一些麻烦。我看过一些处理设备的代码:
var layoutField = new LayoutField(item.Fields[Sitecore.FieldIDs.LayoutField]);
var layoutDefinition = LayoutDefinition.Parse(layoutField.Value);
var deviceDefinition = layoutDefinition.GetDevice(Sitecore.Context.Device.ID.ToString());
foreach (var reference in references)
{
var renderingDefinition = new RenderingDefinition
{
ItemID = reference.RenderingItem.ID.ToString(),
Placeholder = placeHolder,
Datasource = reference.RenderingItem.DataSource
};
deviceDefinition.AddRendering(renderingDefinition);
}
但这似乎不起作用...您可以提供的任何帮助将不胜感激...
【问题讨论】:
-
你提到这个很有趣,我今天早上找到了它,我正在尝试看看它是否具备我完成任务所需的一切。
-
jammykam,如果你想要积分,你可以发表你的评论作为答案,我会这样标记它。我已经用你发布的链接让它工作了,虽然它花了一些时间才能让它工作。
标签: asp.net-mvc sitecore sitecore8