网站核心。从占位符中读取项目
Sitecore. Read items from placeholder
我有包含占位符和列表的页面。我希望能够根据占位符中的项目用信息填充列表。例如:
我有 "Person" 带有名称和图像字段的模板。我根据该模板(A、B 和 C 人)创建了一些项目。添加以这些项目为源的效果图后,我在占位符中显示图像。现在我想获取当前位于占位符中的所有项目,并将他们的 Name 字段写入列表(在占位符之外)。
现在我只能从占位符中获取渲染项,但不能获取源项。
您可以试试下面的方法:
/// <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;
}
}
}
我能够通过在 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)));
我有包含占位符和列表的页面。我希望能够根据占位符中的项目用信息填充列表。例如:
我有 "Person" 带有名称和图像字段的模板。我根据该模板(A、B 和 C 人)创建了一些项目。添加以这些项目为源的效果图后,我在占位符中显示图像。现在我想获取当前位于占位符中的所有项目,并将他们的 Name 字段写入列表(在占位符之外)。
现在我只能从占位符中获取渲染项,但不能获取源项。
您可以试试下面的方法:
/// <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;
}
}
}
我能够通过在 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)));