サブレイアウトのコードは、データソースがコンテキスト アイテムに設定されている場合にその使用を許可していますか? これは、さまざまな方法で実現できます。たとえば、基本クラスでは次のようになります。
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);
}
}
これを使用すると、基本クラスでこれを継承するすべてのサブレイアウトで、コードがコンテキスト アイテムに対して記述されている場合でも、データ ソースがネイティブにサポートされます。