2016-07-27 37 views
3

我擁有包含佔位符和列表的頁面。我希望能夠根據佔位符中的項目填充信息。例如:Sitecore。從佔位符中讀取項目

我有名稱和圖像字段的「人」模板。我根據該模板創建了幾件物品(人物A,B和C)。在將這些項目的渲染添加爲源後,我在佔位符中顯示圖像。現在我想獲取當前佔位符中的所有項目,並將它們的名稱字段寫入列表中(佔位符之外)。

現在我只是能夠得到渲染項目,但不是源項目,佔位符。

回答

1

我能夠Id以獲取源的項目,我在RenderingItem的設置中發現:

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

Marek是對的,RenderingItem不是數據源項目。正如我在我的文章中寫的,我已經能夠獲得RenderingItem。 – user3224222