2014-02-13 61 views
1

所以,最近我一直在努力自定义数据提供了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

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

Otherwi如果您的数据提供者在某种程度上足够聪明,可以返回语言,从而有效地将它们提供给Sitecore两次,从而导致上面显示的问题。 (这打破了TDS)

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作为建议