1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | public void AddSublayoutToItem(string sublayoutId, string datasourcePath) { using (new Sitecore.SecurityModel.SecurityDisabler()) { if (Sitecore.Data.ID.IsID(itemId) && Sitecore.Data.ID.IsID(sublayoutId)) { // 마스터 데이타베이스를 선택한다음, 현재 아이템 아이디를 불러온다 Database masterDatabase = Database.GetDatabase("master"); Item item = masterDatabase.GetItem(Sitecore.Data.ID.Parse(itemId)); // 이미 마스터 데이타베이스가 불러졌다면, 간단하게 현재 아이템을 불러올수가 있다. //Item item = Sitecore.Context.Database.GetItem(Sitecore.Data.ID.Parse(itemId)); if (item != null) { // 레이아웃과 디바이스 정보를 가져온다. LayoutField layoutField = new LayoutField(item.Fields[Sitecore.FieldIDs.LayoutField]); LayoutDefinition layoutDefinition = LayoutDefinition.Parse(layoutField.Value); DeviceDefinition deviceDefinition = layoutDefinition.GetDevice(Sitecore.Context.Device.ID.ToString()); //새로운 렌더링 Definition을 만들고, Sublayout 또는 렌더링의 레퍼런스를 추가한다. RenderingDefinition renderingDefinition = new RenderingDefinition(); renderingDefinition.ItemID = sublayoutId; // 새로 추가될 Sublayout의 Placeholder값을 정한다. renderingDefinition.Placeholder = "content"; // 새로 추가된 Sublayout의 Datasource 값을 정한다. 값은 DataSource의 경로로 대체할수도 있다. renderingDefinition.Datasource = "{24240FF2-B4AA-4EB2-B0A4-63E027934C38}"; // renderingDefinition.Datasource = "/sitecore/content/Home/Books"; // 렌더링 레퍼런스를 선택되어진 디바이스에 추가한다. deviceDefinition.AddRendering(renderingDefinition); // 변경된 레이아웃을 저장한다. item.Editing.BeginEdit(); layoutField.Value = layoutDefinition.ToXml(); ; item.Editing.EndEdit(); } } } } |
2015년 3월 17일 화요일
Sublayout을 Item에 적용시키기 (Coding)
이 소스코드는 새로운 sublayout을 현재 페이지 아이뎀의 레이아웃에 적용시키는 코드이다.