Программно удаляя подслойки в Sitecore - PullRequest
3 голосов
/ 07 марта 2012

Кто-нибудь знает, как удалить визуализации из элемента Sitecore?

Я хочу удалить все вложенные макеты, чтобы заменить их новым набором.Я пробовал это , но, похоже, не работает.Ничего не меняется на предмете.

Кажется, я могу получить рендеринг, подобный этому:

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

ОБНОВЛЕНИЕ Re: techphoria414

Код, который я пробовал:

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

1 Ответ

7 голосов
/ 07 марта 2012

Я думаю, что ваше исключение не связано. Чтобы сохранить изменения, вам нужно отредактировать элемент. Убедитесь, что вы всегда получаете доступ и обновляете значение throgh 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...