Sitecore 如何获取控件的数据源值

Sitecore How to Get Control's Data Source Value

是否可以在内容项上获取 __Rendering 控件的模板字段值? 特别是,我想获得在页面项目控件中定义的 "Data Source" 字段值,如下图所示。

如屏幕截图所示,我在页面项目中有一些控件,我想获取控件的 "Data Source" 字段值。

我使用了这段代码,我可以列出页面项目上使用的所有控件。但是,我不知道如何获取页面上控件的浏览data-source信息。

public RenderingReference[] GetListOfSublayouts(string itemId, Item targetItem)
{
    RenderingReference[] renderings = null;

    if (Sitecore.Data.ID.IsID(itemId))
    {
        renderings = targetItem.Visualization.GetRenderings(Sitecore.Context.Device, true);
    }

    return renderings;
}

public List<RenderingItem> GetListOfDataSource(RenderingReference[] renderings)
{
    List<RenderingItem> ListOfDataSource = new List<RenderingItem>();
    foreach (RenderingReference rendering in renderings)
    {
        if (!String.IsNullOrEmpty(rendering.Settings.DataSource))
        {
            ListOfDataSource.Add(rendering.RenderingItem);
        }
    }
    return ListOfDataSource;
}


RenderingReference[] renderings = GetListOfSublayouts(targetItem.ID.ToString(), targetItem);
List<RenderingItem> ListOfDataSource = GetListOfDataSource(renderings);

这是一篇可以提供帮助的博客 post:Using the Data Source Field with Sitecore Sublayouts

这是您可以在单个控件中调用的相关代码:

private Item _dataSource = null;
public Item DataSource
{
    get
    {
        if (_dataSource == null)
            if(Parent is Sublayout)
                _dataSource = Sitecore.Context.Database.GetItem(((Sublayout)Parent).DataSource);

        return _dataSource;
    }
}

访问上面定义的 DataSource 属性 将为您提供从 CMS 指定为数据源的项目。

这正是我想要的。

完美运行!!!!!!

public IEnumerable<string> GetDatasourceValue(Item targetItem)
{
    List<string> uniqueDatasourceValues = new List<string>();
    Sitecore.Layouts.RenderingReference[] renderings = GetListOfSublayouts(targetItem.ID.ToString(), targetItem);
    foreach (var rendering in renderings)
    {
        if (!uniqueDatasourceValues.Contains(rendering.Settings.DataSource))
            uniqueDatasourceValues.Add(rendering.Settings.DataSource);
        }

        return uniqueDatasourceValues;
    }
}