2016-07-27 38 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