在自定义内容类型的详细信息和摘要模式下为媒体库选择器字段创建两个单独的替代

Create two separate Alternate for media library picker field in Detail and summary mode of a custom content type

我用Orchard CMS 1.10.1。我创建了一个自定义内容类型名称 "Animal",它有一个 MediaLibraryPicker 字段。我创建了一个投影来显示动物列表。在此列表中,我想显示 Parts_Image_Summary,在动物细节模式中,我想显示 Parts_Image_Detail。 为此,我创建了一个备用 Fields.MediaLibraryPicker-Animal.cshtml 并将其代码从

更改为
@Display(BuildDisplay(content, "Summary"))

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

问题是这个交替影响动物细节模式和动物摘要模式,我只需要这个替代动物细节模式。

Shape tracer 没有显示任何符合我需要的替代名称。 我试图将备用文件名更改为 Fields.MediaLibraryPicker-Animal-Detail.cshtml,但没有成功。

Orchard 有很多 field alternates,但是这些 alternates 不包括这个,但是你可以简单地通过实现 IShapeTableProvider 接口添加任何新的 alternates 如下:

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(" ", "");
    }
}