【问题标题】:Programmatically removing sublayouts in Sitecore以编程方式删除 Sitecore 中的子布局
【发布时间】:2012-03-07 15:57:34
【问题描述】:

有谁知道如何从 Sitecore 项目中删除渲染?

我想删除所有子布局,以便用新的集合替换它们。 我有tried this,但它似乎不起作用。该项目没有任何变化。

我似乎能够得到这样的效果图:

RenderingReference[] renderings = item.Visualization.GetRenderings(Sitecore.Context.Device, true);

但似乎没有办法设置它们。

我也可以得到这样的效果图(来自上面的链接):

LayoutDefinition layoutDefinition = LayoutDefinition.Parse(LayoutField.GetFieldValue(item.Fields[Sitecore.FieldIDs.LayoutField]));
DeviceDefinition device = layoutDefinition.GetDevice(Sitecore.Context.Device.ID.ToString());

if (device.Layout != null) device.Layout = null;
if (device.Renderings != null) device.Renderings = new ArrayList();

但这又是行不通的。从 layoutDefinition 中清除设备并设置修改后的设备会导致此异常:No connection could be made because the target machine actively refused it。而且我现在根本无法查看该项目!

我觉得我找错了树,有什么想法吗?

使用 Sitecore 6.4

更新回复:techphoria414

我试过的代码:

layoutDefinition.Devices.Clear();
layoutDefinition.Devices.Add(device);

【问题讨论】:

  • 您能否提供用于将更改保存回字段的代码以及异常的完整堆栈跟踪?

标签: c# .net sitecore sitecore6


【解决方案1】:

我认为你的例外是无关的。要实际保存更改,您需要编辑该项目。确保您始终通过LayoutField.Value 访问和更新值。

LayoutField layoutField = new LayoutField(item.Fields[Sitecore.FieldIDs.LayoutField]);
LayoutDefinition layout = LayoutDefinition.Parse(layoutField.Value);
//make your changes to the LayoutDefinition here
item.Editing.BeginEdit();
layoutField.Value = layout.ToXml();
item.Editing.EndEdit();

【讨论】:

  • 难道他不想删除子布局,而不是添加布局吗?
  • 仍然适用,您可以对 LayoutDefinition 进行任何您喜欢的更改,其中包括每个设备的布局和渲染信息。
  • 啊,我没有意识到LayoutDefinition 包含有关渲染的详细信息。很高兴知道!
猜你喜欢
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2019-09-04
  • 2022-08-18
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多