2013-06-20 5 views
0

태그 값에 따라 컨텐트 항목을 번갈아 만들고 싶습니다.오차드는 번갈아 번갈아 가며 표시합니다.

예를 들어, 내가, 내가 Displaying 방법에서

public class TagAlternatesFactory : ShapeDisplayEvents 
{ 
    public TagAlternatesFactory() 
    { 
    } 

    public override void Displaying(ShapeDisplayingContext context) 
    { 
    } 
} 

이 나를 따라서 새로운 ShapeDisplayEvents

을 구현하도록 지시 그물을 검색 List-ProjectionPage-tags-special

라는 대안을 만들려면 컨텍스트에서 contentItem을 확인해야한다고 생각합니다. 변형을 기반으로 대체 이름을 만듭니다 (태그 항목이 컨텐트 항목에 추가되었다고 가정).

그러나 어떻게해야합니까? 대체 이름을 어떻게 추가합니까? 새로운 대체 유형을 만드는 데 필요한 모든 것이 있습니까? 과수원은 List-ProjectionPage-tags-special을 찾을 수 있습니까?

+0

개 이상의 태그가있는 경우 어떻게해야합니까? 태그 당 하나의 대체? 대체 코드를 추가하는 다른 클래스의 코드를 확인 했습니까? –

+0

@BertrandLeRoy 태그 ATM마다 하나씩 대체 할 것입니다. –

답변

2

나는 버트 랜드의 코멘트에서 큐를 가져 와서 어떤 과수원 출신의 방향을 보았다.

public class TagAlternatesFactory : ShapeDisplayEvents 
{ 
    public override void Displaying(ShapeDisplayingContext context) 
    { 
     context.ShapeMetadata.OnDisplaying(displayedContext => 
     { 
      var contentItem = displayedContext.Shape.ContentItem; 
      var contentType = contentItem.ContentType; 

      var parts = contentItem.Parts as IEnumerable<ContentPart>; 
      if (parts == null) return; 

      var tagsPart = parts.FirstOrDefault(part => part is TagsPart) as TagsPart; 
      if (tagsPart == null) return; 

      foreach (var tag in tagsPart.CurrentTags) 
      { 
       displayedContext.ShapeMetadata.Alternates.Add(
            String.Format("{0}__{1}__{2}__{3}", 
displayedContext.ShapeMetadata.Type, (string)contentType, "tag", tag.TagName)); //See update 
      } 
     }); 
    } 
} 

이 태그 값에 따라 다른보기를 할 수 있습니다 :

여기 내 구현입니다. 따라서 특정 스타일을 적용하려는 프로젝트 페이지가있는 경우 ProjectionPage_tag_special이라는 이름으로 대체보기를 만들고 투영 페이지에서 사용하려면 언제든지 special 태그를 추가하기 만하면됩니다.

업데이트 I 추가 그래서 특정 모양이 무시 될 수있는 다른 이름으로 displayedContext.ShapeMetadata.Type (목록-ProjectionPage 같은)

관련 문제