Sitecore。从占位符中读取项目

Sitecore。从占位符中读取项目,sitecore,sitecore8,sitecore-mvc,Sitecore,Sitecore8,Sitecore Mvc,我有一个带有占位符和列表的页面。我希望能够根据占位符中的项目用信息填充列表。例如: 我有“人”与名称和图像字段模板。我基于该模板创建了一些项目(人员A、B和C)。将这些项目作为源添加渲染后,我会在占位符中显示图像。现在,我想获取当前位于占位符中的所有项目,并将其名称字段写入列表(位于占位符之外) 目前,我只能从占位符中获取渲染项,但无法获取源项。您可以尝试以下方法: /// <summary> /// Return all renderings to be rendere

我有一个带有占位符和列表的页面。我希望能够根据占位符中的项目用信息填充列表。例如:

我有“人”与名称和图像字段模板。我基于该模板创建了一些项目(人员A、B和C)。将这些项目作为源添加渲染后,我会在占位符中显示图像。现在,我想获取当前位于占位符中的所有项目,并将其名称字段写入列表(位于占位符之外)


目前,我只能从占位符中获取渲染项,但无法获取源项。

您可以尝试以下方法:

   /// <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;
         }
       }
   }
//
///返回要在“默认”设备上的特定占位符中渲染的所有渲染
/// 
私有IEnumerable GetRendering(字符串占位符键,Sitecore.Data.Items.Item项)
{
Sitecore.Layouts.RenderingReference[]renderings=GetRenderingReferences(项“默认”);
foreach(渲染中的var渲染)
{
if(rendering.Placeholder==占位符键)
{
返回rendering.RenderingItem;
}
}
}

我能够通过在RenderingItem设置中找到的Id获取源项目:

var ph=“我的占位符”;
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));

我认为
RenderingItem
实际上不是数据源,而是呈现项的定义。每个
RenderingReference
都有
.Settings.DataSource
属性。如果我理解正确,这就是我们要找的。Marek是对的,RenderingItem不是数据源项。正如我在帖子中所写,我已经能够获得RenderingItem。