Пользовательский поставщик данных Sitecore удваивает языковые версии?
Так что в последнее время я работал над нестандартным провайдером данных для Sitecore, и он действительно хорош и работает довольно хорошо, пока не столкнулся с этим:
Как видите, я получаю версии на двух языках. Хотя GetItemVersions моего Data Provider выглядит следующим образом:
/// <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 ответа
ОБНОВЛЕНИЕ 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>
Для тех, кто сталкивается с той же проблемой, что и я, когда следует указаниям документации:
Они забыли упомянуть, что при интеграции в существующую БД (например, основную) вам необходимо переопределить следующий метод:
/// <summary>
/// We don't store any languages.
/// </summary>
public override LanguageCollection GetLanguages(CallContext context)
{
return null;
}
В противном случае ваш провайдер данных достаточно умен, чтобы возвращать языки и, тем самым, эффективно доставлять их в Sitecore 2 раза, вызывая проблему, показанную выше. (который нарушает TDS)
У меня была точно такая же проблема. Переопределение 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, чтобы вернуть ноль, как предложено