2016-06-15 1 views
7

템플릿 고려 :유리 매퍼는

회사

  • 로고 (이미지 필드)
  • 회사 명 (텍스트 필드)
Company

템플릿에는 두 필드에 설정된 표준 값이 있습니다. Company 항목을 변경하지 않고 Glass를 사용하여 저장하면 Logo 필드는 더 이상 표준 값을 사용하지 않습니다. (Company Name 필드는 변경되지 않습니다.)

Glass.Mapper.Sc.DataMappers.SitecoreFieldImageMapper은 Sitecore와는 다른 방식으로 필드의 값을 직렬화하는 것으로 보입니다. 저장하려고하면 필드로 변경된 것으로 생각하고 더 이상 표준 값을 사용하지 않습니다.

표준 값 :

<image mediaid="{GUID}" /> 

유리 생성 값 :

<image height="64" width="64" mediaid="{GUID}" alt="Alt text" /> 

유리 Sitecore와 같은 출력을 생성 할 수있는 방법이 있나요?

답변

0

어떻게 문제가있는 것 같아요 SitecoreFieldImageMapper 이미지에 ImageField지도. 높이기 높이, 너비Alt은 공공의 재산으로 사용됩니다. 우리는 반사를 통해 그들에 보면 우리는 그것의 값 필드에서 직접하지 얻을 것을 볼 수 있습니다 :

public string Alt 
{ 
    get 
    { 
     string text = base.GetAttribute("alt"); 
     if (text.Length == 0) 
     { 
      Item item = this.MediaItem; 
      if (item != null) 
      { 
       MediaItem mediaItem = item; 
       text = mediaItem.Alt; 
       if (text.Length == 0) 
       { 
        text = item["Alt"]; 
       } 
      } 
     } 
     return text; 
    } 
    set 
    { 
     base.SetAttribute("alt", value); 
    } 
} 

을 필드 값이 포함되지 않은 경우 ("고도"에 대한 예를 : 경우 (text.Length == 0)) 연결된 MediaItem에서 값을받습니다. 필드를 저장 한 후 높이를, 너비Alt을 미디어 라이브러리 항목에 추가하게합니다. 확인을해야 Alt 키 속성 모든 것을

int height = 0; 
if(int.TryParse(field.GetAttribute("height"), out height)) 
{ 
    img.Height = height; 
} 


int width = 0; 
if(int.TryParse(field.GetAttribute("width"), out width)) 
{ 
    img.Width = width; 
} 

img.Alt = field.GetAttribute("alt"); 

: 직접 얻는 속성이 아닌 속성의 사용과

int height = 0; 
int.TryParse(field.Height, out height); 
int width = 0; 
int.TryParse(field.Width, out width); 

img.Alt = field.Alt; 
img.Height = height; 
img.Width = width; 

:

는이 코드를 대체 할 시도 할 수이 문제를 해결하려면. 그들이 Null 허용하지 않습니다 나는 GlassMapper이 당신은 설정하지 않은 높이와 이미지를 처리하는 방법을 확실하지 오전하지만 높이에 문제가있을 수 있습니다.

+0

사용자 지정 ImageMapper를 만들고 대답 에서처럼 속성을 업데이트하거나 실제로 해당 코드를 추가 할 위치를 제안 하시겠습니까? –

+0

예, 문제가 있으므로 사용자 지정 ImageMapper를 만드는 것이 좋습니다. 구성 파일을 사용하여 ImageMapper를 사용하도록 구성 할 수 있는지 확실하지 않습니다.그러나 GlassMapper는 오픈 소스이기 때문에 GitHub에서 소스를 포크하고 새로운 ImageMapper로 새로운 어셈블리를 만들 수 있습니다. https://github.com/mikeedwards83/Glass.Mapper – Anton

+0

Repo와 건물을 복제하는 대신,'SitecoreFieldImageMapper'를 상속 받고 get 메소드를 구현하여 재정의하고'CreateResolver'에 등록하십시오 : https : // jammykam .wordpress.com/2015/11/09/custom-glass-mapper-data-handlers-part-2/다음은 필요에 따라 사용할 수 있습니다. 기사의 part-1도 꼭 읽으십시오. – jammykam