2016-07-27 2 views
2

나는 Orchard CMS 1.10.1을 사용합니다. MediaLibraryPicker 필드가있는 사용자 지정 콘텐츠 형식 이름 "Animal"을 만들었습니다. 동물 목록을 보여주기위한 프로젝션을 만들었습니다. 이 목록에서 나는 Parts_Image_Summary을 표시하고 동물 상세 모드에서는 Parts_Image_Detail을 보여주고 싶습니다. 이 목적을 위해 나는 사용자 지정 콘텐츠 형식의 세부 정보 및 요약 모드에서 별도의 미디어 라이브러리 선택 도구 필드 두 개를 만듭니다.

@Display(BuildDisplay(content, "Detail")) 

문제가 난 그냥 동물이 대안이 필요이 대체 효과를 동물 상세 모드와 동물 모두 요약 모드입니다

@Display(BuildDisplay(content, "Summary")) 

에서 Fields.MediaLibraryPicker-Animal.cshtml 대체 및 변경의 코드를 생성 세부 모드.

Shape tracer에는 내 필요에 맞는 대체 이름이 표시되지 않습니다. 대체 파일 이름을 Fields.MediaLibraryPicker-Animal-Detail.cshtml으로 변경하려고 시도했지만 작동하지 않았습니다.

답변

2

오차드 필드 교대를 많이 가지고 있지만, 이러한 대체이 일을 포함하지 않은,하지만 당신은 다음과 같은 IShapeTableProvider 인터페이스를 구현하여 새로운 대안을 간단하게 추가 할 수 있습니다

public class Shapes : IShapeTableProvider { 
    public void Discover(ShapeTableBuilder builder) { 
     builder.Describe("Fields_MediaLibraryPicker") 
      .OnDisplaying(displaying => { 
       ContentItem contentItem = displaying.Shape.ContentItem as ContentItem; 

       if (contentItem == null) { 
        return; 
       } 

       // [ShapeType]__[ContentType]__[DisplayType] e.g. Fields.MediaLibraryPicker-Animal-Detail 
       displaying.ShapeMetadata.Alternates.Add(EncodeAlternateElement(
        displaying.ShapeMetadata.Type + "__" + 
        contentItem.ContentType + "__" + 
        displaying.ShapeMetadata.DisplayType)); 
      }); 
    } 

    private string EncodeAlternateElement(string alternateElement) { 
     return alternateElement.Replace("-", "__").Replace(".", "_").Replace(" ", ""); 
    } 
} 
+0

감사 메이트, 그것은 많이 도움 –