Sitecore自定义数据提供商将语言版本加倍?

时间:2014-02-13 08:57:29

标签: sitecore

最近我一直在为Sitecore工作一个自定义数据提供程序,它非常整洁,并且在我遇到这个问题之前效果很好:

Double Languages

正如您所看到的,我正在接收双语版本。即使我的DataProvider的GetItemVersions看起来像这样:

/// <summary>
/// Used to retrieve version and language information of given item.
/// </summary>
public override VersionUriList GetItemVersions(ItemDefinition itemDefinition, CallContext context)
{
    VersionUriList result = null;

    if (itemDefinition.ID == RootItem.RootId)
    {
        // Our root only has 1 version in 1 language.
        result = new VersionUriList { new VersionUri(LanguageManager.GetLanguage("en"), Version.First) };
    }
    else if (CanProcess(itemDefinition.ID))
    {
        // Snipped processing of own items
    }

    return result;
}

所以这意味着任何我不会处理的项目都会返回null。有没有人见过这种行为,并确切知道在哪里解决这个问题?

2 个答案:

答案 0 :(得分:2)

更新29/04/2014

与此同时,我找到了一种更好的治疗方法。在数据提供者的配置中,您可以确定哪些方法可用,如下所示:

<sitecore>
    <dataProviders>
        <CustomDataProvider type="MyLib.Data.CustomDataProvider, MyLib">
            <disable>*</disable>
            <enable>GetChildIDs</enable>
            <enable>GetParentID</enable>
            <enable>GetItemDefinition</enable>
            <enable>GetItemVersions</enable>
            <enable>GetItemFields</enable>
        </CustomDataProvider>
    </dataProviders>
</sitecore>

对于那些在遵循documentation指南时遇到与我自己相同问题的人:

他们忘记提到当您集成到现有数据库(如主服务器)时,您需要覆盖以下方法:

/// <summary>
/// We don't store any languages.
/// </summary>
public override LanguageCollection GetLanguages(CallContext context)
{
    return null;
}

否则,您的数据提供者在某种程度上足够聪明,可以返回语言,从而有效地为Sitecore提供2次,导致上面显示的问题。 (打破了TDS)

答案 1 :(得分:1)

我遇到了完全相同的问题。覆盖GetItemVersions和GetLanguages解决了这个问题。

public override VersionUriList GetItemVersions(ItemDefinition itemDefinition, CallContext context)
        {
            if (return true if the itemDefinition is a item from your db)
            {
                VersionUriList result = new VersionUriList();

                //Add versions on languages you want
                result.Add(LanguageManager.GetLanguage("nl"), Sitecore.Data.Version.First);
                result.Add(LanguageManager.GetLanguage("en"), Sitecore.Data.Version.First);

                return result;
            }
            //itemDefinition is a item from a sitecore db => return null (sc will handle versions of his items)
            return null;
        }

并覆盖GetLanguages以按建议返回null