2012-03-07 3 views
2

Sitecore 항목에서 렌더링을 제거하는 방법을 아는 사람이 있습니까?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

를 사용

UPDATE 재 : techphoria414

코드 나는 시도 :

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

변경 사항을 필드에 다시 저장하는 데 사용할 코드와 예외의 전체 스택 추적을 제공 할 수 있습니까? – techphoria414

+0

내 질문이 업데이트되었습니다. – Jon

답변

6

내가 당신의 예외가 무관하다고 생각합니다. 실제로 변경 사항을 저장하려면 항목을 편집해야합니다. 항상 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(); 
+0

레이아웃을 추가하지 않고 하위 레이아웃을 제거하고 싶지 않습니까? –

+0

여전히 적용됩니다. 각 장치의 레이아웃 및 렌더링 정보가 포함 된 LayoutDefinition을 원하는대로 변경할 수 있습니다. – techphoria414

+0

아아, 'LayoutDefinition'에 렌더링에 대한 세부 정보가 있다는 것을 알지 못했습니다. 그것은 아주 잘 알고 있습니다! –

관련 문제