【问题标题】:Sitecore Custom Data Provider doubles language versions?Sitecore 自定义数据提供程序将语言版本翻倍?
【发布时间】:2014-04-30 00:05:53
【问题描述】:

所以最近我一直在为 Sitecore 开发一个自定义数据提供程序,它非常简洁并且运行良好,直到我遇到这个:

如您所见,我收到了双语版本。即使我的 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。有没有人以前见过这种行为并且确切地知道在哪里解决这个问题?

【问题讨论】:

    标签: sitecore


    【解决方案1】:

    2014 年 4 月 29 日更新

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

    <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)

    【讨论】:

      【解决方案2】:

      我遇到了完全相同的问题。覆盖 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        • 2020-08-07
        相关资源
        最近更新 更多