我正在使用形状跟踪器,以便使用我的一个分类字段的替代视图,称为位置。然而,与其他形状不同,在这种情况下,替代品不提供不同显示类型的选项摘要或详细信息。因此,通过更改 1,您可以更改另一个。我需要能够独立完成它们。
我创建了一个视图,请参见Fields.Contrib.TaxonomyField-Location.cshtml,但正如我所说,如果显示类型是详细信息或摘要,则呈现相同的视图。
请问我该如何克服这个问题。
谢谢乔恩
我正在使用形状跟踪器,以便使用我的一个分类字段的替代视图,称为位置。然而,与其他形状不同,在这种情况下,替代品不提供不同显示类型的选项摘要或详细信息。因此,通过更改 1,您可以更改另一个。我需要能够独立完成它们。
我创建了一个视图,请参见Fields.Contrib.TaxonomyField-Location.cshtml,但正如我所说,如果显示类型是详细信息或摘要,则呈现相同的视图。
请问我该如何克服这个问题。
谢谢乔恩
不久前我遇到了同样的问题。ShapeDisplayEvents
你可以通过实现一个类来提供你自己的替代品。
这是一个实现,它根据内容类型、显示类型或两者为您提供替代方案:
public class PartContentTypeAlternateFactory : ShapeDisplayEvents {
public override void Displaying(ShapeDisplayingContext context) {
context.ShapeMetadata.OnDisplaying(displayedContext => {
var shapeType = displayedContext.ShapeMetadata.Type;
var contentItem = displayedContext.Shape.ContentItem;
var displayType = displayedContext.ShapeMetadata.DisplayType;
var contentType = contentItem.ContentType;
displayedContext.ShapeMetadata.Alternates.Add(
String.Format("{0}__{1}", shapeType, displayType));
displayedContext.ShapeMetadata.Alternates.Add(
String.Format("{0}__{1}__{2}", shapeType, (string)contentType, displayType));
});
}
}
您最终会在形状跟踪器中出现一些额外的替代项,如下所示:
你现在可以使用一个名为Fields.Contrib.TaxonomyField-Location-Summary
or的替代品Fields.Contrib.TaxonomyField-Location-Detail
。你可以扩展这个类来添加你想要的任何替代品。
编辑
我没有意识到你不能轻易地获得字段名称,所以尝试这样的事情 - 它做的事情类似于所做的事情UrlAlternatesFactory
,即它循环现有的替代品并将 displayType 添加到它们。这应该为您提供一个包含字段名称和显示类型的替代项。
public class PartContentTypeAlternateFactory : ShapeDisplayEvents {
public override void Displaying(ShapeDisplayingContext context) {
context.ShapeMetadata.OnDisplaying(displayedContext => {
var alternates = displayedContext.ShapeMetadata.Alternates.Select(a => a + "__" + displayedContext.ShapeMetadata.DisplayType);
displayedContext.ShapeMetadata.Alternates = displayedContext.ShapeMetadata.Alternates.Union(alternates).ToList();
});
}
}