【问题标题】:Sitecore. Read items from placeholder网站核心。从占位符中读取项目
【发布时间】:2016-07-27 07:49:44
【问题描述】:

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

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

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

【问题讨论】:

    标签: sitecore sitecore8 sitecore-mvc


    【解决方案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;
             }
           }
       }
    

    【讨论】:

    • 我觉得RenderingItem其实不是数据源而是渲染项的定义。每个RenderingReference 都有.Settings.DataSource 属性。如果我正确理解了这个问题,这就是我们正在寻找的。​​span>
    • Marek 是对的,RenderingItem 不是数据源项。正如我在帖子中所写,我已经能够获得 RenderingItem。
    【解决方案2】:

    我能够通过在 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)));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多