gpt4 book ai didi

Sitecore更新渲染引用

转载 作者:行者123 更新时间:2023-12-01 12:31:36 27 4
gpt4 key购买 nike

在 Sitecore 8.0 项目中,我目前正在尝试以编程方式更新 RenderingReference 的数据源。由于早期的决定,渲染的数据源不是基于 Id,而是基于路径。

使用以下代码,我获取渲染引用,并在方法中正确更新数据源。但是更改永远不会保存到数据库中。

我做错了什么吗?还是我正在尝试做一些不可能的事情?

page.Editing.BeginEdit();
var renderings = page.Visualization.GetRenderings(Sitecore.Context.Device, true);
foreach (var rendering in renderings)
{
rendering.Settings.DataSource = "A New DataSource";
}
page.Editing.EndEdit();

最佳答案

您需要更新 __Layout 字段的值。

这里有一篇很好的博客文章对此进行了解释:Update data source of sublayout or rendering in Sitecore .

代码是这样的:

public void UpdateRenderingDatasource(Item item, string newDatasource)
{
//Get all added renderings
Sitecore.Layouts.RenderingReference[] renderings = item.Visualization.GetRenderings(Sitecore.Context.Device, true);

// Get the layout definitions and the device
LayoutField layoutField = new LayoutField(item.Fields[Sitecore.FieldIDs.LayoutField]);
LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value);
DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(Sitecore.Context.Device.ID.ToString());
foreach (RenderingReference rendering in renderings)
{
// Update the renderings datasource value accordingly
deviceDefinition.GetRendering(rendering.RenderingID.ToString()).Datasource = newDatasource;
// Save the layout changes
item.Editing.BeginEdit();
layoutField.Value = layoutDefinition.ToXml();
item.Editing.EndEdit();
}
}

关于Sitecore更新渲染引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33778677/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com