2016-07-27 5 views
3

プレースホルダとリストを持つページがあります。プレースホルダ内の項目に応じて情報をリストに埋め込むことができます。例:Sitecore。プレースホルダからアイテムを読む

名前と画像フィールドを持つ「Person」テンプレートがあります。私はそのテンプレート(人A、B、C)に基づいていくつかのアイテムを作成します。これらのアイテムのレンダリングをソースとして追加した後、プレースホルダにイメージを表示します。今は、プレースホルダにあるすべてのアイテムを取得し、それらのNameフィールドをリスト(プレースホルダの外にある)に書き込みたいと思います。

今のところ、レンダリングアイテムは取得できましたが、ソースアイテムではなく、プレースホルダから取得できました。

答えて

1

を:

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

あなたが怒鳴る方法試すことができます:私はRenderingItemの設定で見つかったIDによってソースアイテムを取得することができた

/// <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

関連する問題