【发布时间】:2012-05-08 11:57:11
【问题描述】:
这是我的规则
用户个人资料 fb_likes 字段包含站点核心的位置
将数据源设置为TestItem2
我已将此规则应用于模板标准值的子布局,但此规则永远不会更改数据源。
我也试过这种情况
其中为真(动作总是执行)。
但还是没有运气,
如果我将操作更改为
隐藏渲染
效果很好。
我在这里做错了什么??
【问题讨论】:
这是我的规则
用户个人资料 fb_likes 字段包含站点核心的位置
将数据源设置为TestItem2
我已将此规则应用于模板标准值的子布局,但此规则永远不会更改数据源。
我也试过这种情况
其中为真(动作总是执行)。
但还是没有运气,
如果我将操作更改为
隐藏渲染
效果很好。
我在这里做错了什么??
【问题讨论】:
您的子布局代码是否允许在将数据源设置在上下文项上时使用它?您可以通过多种方式实现这一目标。例如在基类中:
protected string DataSource
{
get
{
var sublayout = Parent as SublayoutBase;
return sublayout == null ? string.Empty : sublayout.DataSource;
}
}
protected Item DataSourceItem
{
get
{
return string.IsNullOrEmpty(DataSource)
? Sitecore.Context.Item
: Sitecore.Context.Database.GetItem(DataSource) ?? Sitecore.Context.Item;
}
}
然后在您的子布局代码中使用 DatSourceItem 而不是上下文项来显示内容。我看到的另一种方法是:
protected override void Render(HtmlTextWriter writer)
{
if (this.DataSourceItem != null)
using (new Sitecore.Data.Items.ContextItemSwitcher(this.DataSourceItem ))
{
base.Render(writer);
}
else
{
base.Render(writer);
}
}
即使代码是针对 Context 项编写的,在其基类中继承 this 的所有子布局都使用它本机支持数据源。
【讨论】: