Sitecore规则不将数据源设置为其他项目?

时间:2012-05-08 11:57:12

标签: sitecore sitecore6

这是我的规则

  

其中用户个人资料fb_likes字段包含sitecore

     

将数据源设置为TestItem2

我已将此规则应用于模板标准值的子布局,但此规则从不更改数据源。

我也试过这个条件

  

其中为true(操作始终执行)。

但又没有运气,

如果我将行动改为

  

隐藏渲染

效果很好。
我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

当子布局的代码设置在上下文项目上时,子布局的代码是否允许使用数据源?您可以通过多种方式实现这一目标。例如,在基类中:

    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项编写的。