1

これが私のルールです

ユーザー プロファイルの fb_likes フィールドに sitecore が含まれている場所

データ ソースを TestItem2 に設定する

このルールをテンプレートの標準値のサブレイアウトに適用しましたが、このルールがデータ ソースを変更することはありません。

私もこの条件を試しました

ここで true (アクションは常に実行されます)。

しかし、再び運が悪く、

アクションを次のように変更した場合

レンダリングを非表示

それは正常に動作します。
私はここで何を間違っていますか??

4

1 に答える 1

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);
        }
    }

これを使用すると、基本クラスでこれを継承するすべてのサブレイアウトで、コードがコンテキスト アイテムに対して記述されている場合でも、データ ソースがネイティブにサポートされます。

于 2012-05-21T22:34:16.693 に答える