gpt4 book ai didi

rendering - 使用 renderDefinition.ItemId 以编程方式将站点核心渲染复制到新模板?

转载 作者:行者123 更新时间:2023-12-04 15:01:28 25 4
gpt4 key购买 nike

我有一个自定义的 sitecore 按钮,它可以更改当前项目的模板,非常简单。

但是,作为其中的一部分,我还尝试将旧布局的渲染迁移到新布局,如果它属于 ItemId 的某个子布局类型| .然而ItemId返回的始终为空,这是我从 RenderingDefinition 返回的唯一值是 UniqueId .

我究竟做错了什么?

我用过 this blog post作为指南。

代码

public class ConvertToNewTemplateCommand : Command
{
protected void Run(ClientPipelineArgs args)
{
if (!SheerResponse.CheckModified())
return;

Item item = Context.ContentDatabase.Items[args.Parameters["id"]];
if (args.IsPostBack)
{
if (args.Result == "yes")
{
//Get current layout details
var originalLayoutXml = item[FieldIDs.LayoutField];

//Get new template
TemplateItem hubTemplate = Context.ContentDatabase.GetTemplate("some guid...");
//Change template
item.ChangeTemplate(hubTemplate);
//Reset laytout
ResetLayout(item);
//Get reset layout
var newLayoutXml = item[FieldIDs.LayoutField];

//Add all the module containers to the new layout in the central column
MoveModuleContainers(item, originalLayoutXml, newLayoutXml);
}
}
}

private void MoveModuleContainers(Item item, string oldXml, string newXml)
{
var oldLayout = LayoutDefinition.Parse(oldXml);
var newLayout = LayoutDefinition.Parse(newXml);

bool updated = false;

var oldRenderings = (oldLayout.Devices[0] as DeviceDefinition).Renderings;
var newRenderings = (newLayout.Devices[0] as DeviceDefinition).Renderings;

foreach (RenderingDefinition rendering in oldRenderings)
{
// Here is where the rendering.ItemID is always null
if (rendering != null && !String.IsNullOrEmpty(rendering.ItemID) && new Guid(rendering.ItemID) == new Guid("matching guid..."))
{
rendering.Placeholder = "middlecolumn";
newRenderings.Add(rendering);
updated = true;
}
}

if (updated)
{
// Save item...
}
}
}

最佳答案

我上了 Sitecore support最后告诉我我应该使用:

Sitecore.Data.Fields.LayoutField.GetFieldValue(item.Fields[Sitecore.FieldIDs.LayoutField])

代替:
item[FieldIDs.LayoutField]

获取元素 layoutField正确。这导致渲染值被正确解析,正如他们所说,其余的都是历史。

关于rendering - 使用 renderDefinition.ItemId 以编程方式将站点核心渲染复制到新模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13689602/

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