Sitecore.Context特定于站点内的子项

时间:2016-05-12 12:35:00

标签: sitecore sitecore7.2

有没有办法设置一个特定于子文件夹/类别和所有子项但仍位于具有自己上下文的全局网站的sitecore.Context.Site?

因此,我们将site.com作为主站点,具有自己的上下文,然后是site.com/sub-site。

由于各种原因,这需要按照目前的情况进行,并且不能拆分为完全独立的站点。

1 个答案:

答案 0 :(得分: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;
}

按模板查找儿童

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