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;
}
}
是否可以在内容项上获取 __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;
}
}