2016-05-12 47 views
0

是否有任何設置sitecore.Context.Site的方法,該子網站特定於子文件夾/類別和所有子項目,但仍位於具有自己的上下文的全局站點內?特定於網站內子項目的Sitecore.Context

因此,我們將site.com作爲主站點,並擁有自己的上下文,然後是site.com/sub-site。

由於各種原因,這需要像目前一樣進行,並且不能拆分爲完全獨立的網站。

+0

爲什麼你需要另一個「網站」? – Gatogordo

+0

因此,我們可以從輔助站點內訪問與輔助站點相關的配置,這些輔助站點與整個父站點不同。 –

+0

是否可以在其他地方使用該配置?只是要求,因爲使用子網站會讓你陷入麻煩。創建另一種設置配置(或使用其他現有方式)的方法會容易得多。 – Gatogordo

回答

0

創建使用當前上下文查找「主頁」項目的自己的Item方法。這通常是通過遍歷樹來查找基於模板的項目來完成的。

一旦你有家的物品,你可以找到你的設置項目。

項目擴展方法:

查找項目由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; 
}