从其他项目 (MVC) 继承 Sitecore 渲染



我有一部分网站有深度的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));

但是,我在了解如何将渲染引用项添加到子页面上的占位符时遇到了一些麻烦。 我看过一些处理设备的代码:

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);
}

但这似乎不起作用...您能提供的任何帮助将不胜感激...

您实质上是在寻找占位符回退,以允许您使用在父项的同一占位符中指定的组件。您可以在这篇 Sitecore 占位符回退博客文章中找到有关如何实现此目的的更多详细信息,包括所需的代码。

最新更新