2013-06-20 70 views
0

我想根據其標籤值爲內容項目創建替代品。基於標籤的果園替代品

例如,我想創建一個名爲List-ProjectionPage-tags-special

搜索網備用引導我去實現一個新的ShapeDisplayEvents

因此,我有

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

    public override void Displaying(ShapeDisplayingContext context) 
    { 
    } 
} 

Displaying方法,我相信我需要檢查contextItem.Shape中的contentItem並根據它創建一個替代名稱(假設它已將TagsPart添加到內容項目中)。

但是,我該怎麼處理呢?我如何添加備用的名稱?那是否需要創建一個新的替代類型?果園知道要尋找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標記添加到該視圖即可。

更新 我加入了displayedContext.ShapeMetadata.Type至備用名稱,以便具體形狀也可以覆蓋(如列表,ProjectionPage)