2014-02-03 3 views
2

Я использую SItecore 7.1 с Glass.Mapper.Sc 3.1.7.26. У меня есть следующая модель, в которой открыт общий доступ к Service Id поле:Отключить проверку версии для конкретной недвижимости в Sitecore glass mapper

[SitecoreType] 
public class ServiceMapping 
{ 
    [SitecoreField(FieldName = "Service Id")] 
    public virtual string ServiceId { get; set; } 
} 

И у меня есть следующая модель, которая ссылается на Mapping Service над Droptree полем (также совместно):

[SitecoreType] 
public class OnlineService 
{ 
    [SitecoreInfo(SitecoreInfoType.DisplayName)] 
    public virtual string DisplayName { get; set; } 

    [SitecoreField(FieldName = "Service")] 
    public virtual ServiceMapping ServiceMapping { get; set; } 
} 

Когда я загружаю Экземпляр OnlineService должен быть зависим от языка, из-за DisplayName. Предположим, что у меня есть OnlineService, доступный на немецком и английском языках, и мой ServiceMapping только на английском языке, затем я получаю null для объекта ServiceMapping при запросе страницы на немецком языке.

Возможно ли присвоить объекту ServiceMapping.ServiceId параметр, который он не должен проверять на наличие существующей языковой версии? Я знаю, что есть VersionCountDisabler(), но я не могу использовать это, потому что мне нужен класс OnlineService для проверки языковой версии.

+0

Вы должны смотреть на [базовый язык] (http://marketplace.sitecore.net/en/Modules/Language_Fallback.aspx), это не проблема стекла. – jammykam

+0

@jammykam Если это невозможно сделать со стеклом (или не должно быть его частью), то почему существует VersionCountDisabler()? Это будет точно соответствовать моим потребностям, я только ищу способ адаптировать это для 1 поля. Языковой запас - это совсем другая история. Элемент ServiceMapping может находиться на английском или немецком языке или что-то еще. При резервности Предмет должен находиться на резервном языке. Но мне не нужен резерв для общих полей, просто нужно отключить проверку версии. –

+1

Хорошо. Взгляните на http://stackoverflow.com/a/19712345/661447, это может помочь. Я уверен, что Майк скоро пройдет :) – jammykam

ответ

4

Худ, это сложный вопрос, код ниже не проверен (я пишу это, как я думаю о решении), но должен указывать на направление записи.

public class MyCrazyType : SitecoreFieldTypeMapper 
{ 
    public override object GetFieldValue(string fieldValue, Mapper.Sc.Configuration.SitecoreFieldConfiguration config, SitecoreDataMappingContext context) 
    { 
     using (new VersionCountDisabler()) 
     { 
      return base.GetFieldValue(fieldValue, config, context); 
     } 
    } 

    public override bool CanHandle(Mapper.Configuration.AbstractPropertyConfiguration configuration, Context context) 
    { 
     //this will mean this handle only works for this type 
     return configuration.PropertyInfo.PropertyType == typeof (ServiceMapping); 
    } 

} 

Использование этого стекла отображает пустой объект в целевой тип.

Вам нужно будет зарегистрировать обработчик с Glass, увидеть этот учебник: http://glass.lu/docs/tutorial/sitecore/tutorial19/tutorial19.html

+2

Да, это работает отлично. Может быть, я подумаю о создании настраиваемого атрибута (наследовать от 'SitecoreFieldAttribute') и проверять этот атрибут в обработчике. –

+0

Это даст гораздо более гибкое решение! Опубликуйте блог, если хотите, я бы хотел его увидеть. –

+0

Я написал сообщение в блоге об этом [здесь] (http://ctor.io/shared-field-references-in-glass-mapper/) –

Смежные вопросы