我的网站有一部分深度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
}
请注意,我不想将它们持久存储到数据存储中,我只是希望它们即时添加,因为如果有人实际将渲染添加到当前项目,则继承将停止此项目。或者,如果有人在顶部更改渲染图,那么它也应该传播给孩子们。
我有一些代码可以让我从给定的占位符渲染引用(从Stack Overflow中提取):
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);
}
但这似乎没有用......你能提供的任何帮助都会受到赞赏......
答案 0 :(得分:2)
您实际上在寻找占位符回退,以允许您使用在父项的同一占位符中指定的组件。您可以在此Sitecore Placeholder Fallback blog post中找到有关如何实现此目标的更多详细信息,包括所需的代码。