2016-07-27 1 views
3

자리 표시 자 및 목록이있는 페이지가 있습니다. 자리 표시 자의 항목에 따라 정보로 목록을 채울 수 있기를 원합니다. 예 :Sitecore. 자리 표시 자의 항목 읽기

"인물"템플릿에 이름과 이미지 필드가 있습니다. 그 템플릿 (사람 A, B 및 C)을 기반으로 몇 가지 항목을 만듭니다. 이러한 항목을 렌더링으로 소스로 추가 한 후 이미지를 자리 표시 자에 표시합니다. 이제는 현재 자리 표시 자에있는 모든 항목을 가져 와서 Name 필드를 목록에 씁니다 (자리 표시 자 밖에 있음).

현재로서는 렌더링 항목을 가져올 수 있었지만 소스 항목이 아닌 자리 표시자를 얻을 수있었습니다.

답변

1

나는 RenderingItem의 설정에서 발견 ID로 소스 항목을 얻을 수있었습니다 :

var ph = "my_placeholder"; 
var renderingReferences = Sitecore.Context.Item.Visualization.GetRenderings(Sitecore.Context.Device, true); 
var renderingsInPlaceholder = renderingReferences.Where(r => r.Placeholder.EndsWith('/' + ph, StringComparison.OrdinalIgnoreCase)); 
var items = renderingsInPlaceholder.Select(x => context.GetItem(ID.Parse(x.Settings.DataSource))); 
1

당신은 울부 짖는 방법을 시도 할 수 있습니다

/// <summary> 
    /// Return all renderings to be rendered in a specific placeholder on the "default" device 
    /// </summary> 
    private IEnumerable<Sitecore.Data.Items.RenderingItem> GetRenderings(string placeholderKey, Sitecore.Data.Items.Item item) 
    { 
     Sitecore.Layouts.RenderingReference[] renderings = GetRenderingReferences(item, "default"); 
     foreach (var rendering in renderings) 
     { 
     if (rendering.Placeholder == placeholderKey) 
     { 
      yield return rendering.RenderingItem; 
     } 
     } 
    } 
+3

내가 RenderingItem' 사실 아니다 '라고 생각 데이터 소스이지만 렌더링 항목의 정의. 각'RenderingReference'는'.Settings.DataSource' 속성을 가지고 있습니다. 그리고 내가이 질문을 정확하게 이해한다면, 우리가 찾고있는 것입니다. –

+0

마렉이 맞습니다. RenderingItem은 데이터 소스 항목이 아닙니다. 그리고 내 글에서 이미 RenderingItem을 얻을 수있었습니다. – user3224222