레이블이 sublayout인 게시물을 표시합니다. 모든 게시물 표시
레이블이 sublayout인 게시물을 표시합니다. 모든 게시물 표시

2015년 4월 24일 금요일

Item에 적용되어진 Sublayout 리스트 출력

#HowTo #.NET #Rendering #렌더링 #

 현재 이 코드는 컨텐트 페이지에 적용된 컨트롤 리스트 들을 보여주는 것이다. 간혹, 프리젠테이션 디테일에 적용된 sublayout리스트 들을 불러야 할 경우가 생기는데, 이럴 경우 아래의 코드를 이용하여 적용되어진 컨트롤 리스트들을 출력할수가 있다.


 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
// 디바이스에 적용된 모든 sublayout 리스트 출력
public RenderingReference[] GetListOfSublayouts(string itemId, Item targetItem)
{
    RenderingReference[] renderings = null;

    if (Sitecore.Data.ID.IsID(itemId))
    {
        renderings = targetItem.Visualization.GetRenderings(Sitecore.Context.Device, true);
    }

    return renderings;
}

// 프리젠테이션 디테일에 적용되어진 렌더링 정보를 가져옴
public List<RenderingItem> GetListOfDataSource(RenderingReference[] renderings)
{
    List<RenderingItem> ListOfDataSource = new List<RenderingItem>();
    foreach (RenderingReference rendering in renderings)
    {
        if (!String.IsNullOrEmpty(rendering.Settings.DataSource))
        {
            ListOfDataSource.Add(rendering.RenderingItem);
        }
    }
    return ListOfDataSource;
}

RenderingReference[] renderings = GetListOfSublayouts(targetItem.ID.ToString(), targetItem);
List<RenderingItem> ListOfDataSource = GetListOfDataSource(renderings);

2015년 3월 17일 화요일

Sublayout을 Item에 적용시키기 (Coding)

이 소스코드는 새로운 sublayout을 현재 페이지 아이뎀의 레이아웃에 적용시키는 코드이다.



 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();
            }
        }
    }
}