2016-05-12 20 views
0

sitecore.Context.Siteを設定する方法はありますか?サブフォルダ/カテゴリとすべてのサブアイテムに固有ですが、独自のコンテキストを持つグローバルサイト内にまだ位置しています?Sitecore.サイト内のサブアイテムに固有のコンテキスト

私たちは独自のコンテキストを持つメインサイトとしてsite.comを持っており、それからsite.com/sub-siteを持っています。

これはさまざまな理由で現在行われているため、完全に別のサイトに分割することはできません。

+0

なぜ、別の「サイト」が必要ですか? – Gatogordo

+0

したがって、セカンダリサイトにリンクされているセカンダリサイト内の設定は、親サイト全体とは異なるものにアクセスできます。 –

+0

その設定を他の場所に置くことは可能ですか?サブサイトを使うと困ってしまうかもしれません。configsを設定する別の方法(または他の既存の方法を使う)を作るのはずっと簡単です。 – Gatogordo

答えて

0

現在のコンテキストを使用して 'ホームページ'アイテムを見つける独自のアイテムメソッドを作成します。これは通常、そのテンプレートに基づいてアイテムを探してツリーをトラバースすることによって行われます。

ホームアイテムを取得したら、設定アイテムを見つけることができます。

アイテムの拡張メソッド:

がTeplate商品

public static bool IsNull(this Item item) 
{ 
    return item == null; 
} 

public static bool HasBaseTemplate(this Item item, string baseTemplateNameOrId) 
{ 
    if (IsNull(item) || item.TemplateID.IsNull) return false; 

    var template = item.Template; 

    if (template == null) return false; 

    return IsMatchOnTemplateNameOrId(baseTemplateNameOrId, template) || HasBaseTemplateHelper(item.Template.BaseTemplates, baseTemplateNameOrId); 
} 

private static bool HasBaseTemplateHelper(TemplateItem[] baseTemplates, string baseTemplateNameOrId) 
{ 
    var templateFound = false; 
    foreach (var baseTemplateItem in baseTemplates.Where(baseTemplateItem => !IsNull(baseTemplateItem) && !baseTemplateItem.ID.IsNull)) 
    { 
     templateFound = IsMatchOnTemplateNameOrId(baseTemplateNameOrId, baseTemplateItem) || HasBaseTemplateHelper(baseTemplateItem.BaseTemplates, baseTemplateNameOrId); 

     if (templateFound) 
     { 
      break; 
     } 
    } 
    return templateFound; 
} 

private static bool IsMatchOnTemplateNameOrId(string baseTemplateNameOrId, TemplateItem baseTemplateItem) 
{ 
    return baseTemplateItem.ID.Guid.ToString("B").Equals(baseTemplateNameOrId, StringComparison.OrdinalIgnoreCase) || 
         baseTemplateItem.FullName.Equals(baseTemplateNameOrId, StringComparison.OrdinalIgnoreCase) || 
         baseTemplateItem.Name.Equals(baseTemplateNameOrId, StringComparison.OrdinalIgnoreCase); 
} 

を探すテンプレートによって最初に親

public static Item GetFirstParentUsingTemplate(this Item currentItem, string baseTemplateNameOrId) 
{ 
    if (currentItem == null) 
    { 
     return null; 
    } 
    if (IsMatchOnTemplateNameOrId(baseTemplateNameOrId, currentItem.Template)) 
    { 
     return currentItem; 
    } 
    var parent = currentItem.Parent; 
    while (parent != null && IsMatchOnTemplateNameOrId(baseTemplateNameOrId, parent.Template) == false) 
    { 
     parent = parent.Parent; 
    } 
    return parent; 
} 

はテンプレート

012によって子供を探します
public static ItemList GetChildrenUsingTemplate(this Item currentItem, string baseTemplateNameOrId) 
{ 
    var children = currentItem.Axes.GetDescendants(); // flat list of all children 
    var childList = new ItemList(); 
    if (String.IsNullOrWhiteSpace(baseTemplateNameOrId)) 
    { 
     return childList; 
    } 
    foreach (Item child in children) 
    { 
     if (child.HasBaseTemplate(baseTemplateNameOrId)) 
     { 
      childList.Add(child); 
     } 
    } 
    return childList; 
} 
関連する問題