Orchardcms (ContentType/DisplayType)-果园中布局形状的特定替代

Orchardcms (ContentType/DisplayType)-果园中布局形状的特定替代,orchardcms,Orchardcms,我使用Orchard 1.10.1 是否可以创建(ContentType/DisplayType)特定于Orchard布局形状的替代品 我需要在DisplaytypeDetail中为CustomContentType设置一个特定的备选布局 提前感谢。布局形状似乎没有现成的替代设置: 如果向下滚动一位到下一个区域,区域,则会看到它有一个ondisplay()事件处理程序,该处理程序在末尾添加了替换项 我不确定是否有一个内置的技巧支持这一点,我不知道。假设没有我也不知道的“布局”的任何特殊大小

我使用
Orchard 1.10.1

是否可以创建(
ContentType
/
DisplayType
)特定于Orchard布局形状的替代品

我需要在
Displaytype
Detail中为
CustomContentType
设置一个特定的备选布局


提前感谢。

布局形状似乎没有现成的替代设置:

如果向下滚动一位到下一个区域,
区域
,则会看到它有一个
ondisplay()
事件处理程序,该处理程序在末尾添加了替换项

我不确定是否有一个内置的技巧支持这一点,我不知道。假设没有我也不知道的“布局”的任何特殊大小写,您可以制作自己的
IShapeTableProvider
,它添加了一些替代项以满足您的需求

似乎有一些解释了如何做到这一点的想法


在注释中还提到,您可以启用形状跟踪器的Url替换功能,这可能有助于您对其进行排序。

以下是基于内容类型的布局替换提供程序的示例:

public class LayoutAlternateProvider : ContentHandler
{
    string contentType;
    private readonly IWorkContextAccessor _workContextAccessor;

    protected override void BuildDisplayShape(BuildDisplayContext context)
    {
        if (context.DisplayType == "Detail" && !IsWidget(context.ContentItem))
        {
            context.Layout.Metadata.Alternates.Add("Layout__" + context.ContentItem.ContentType);
        }
    }

    private static bool IsWidget(ContentItem item)
    {
        return item.TypeDefinition.Settings.Any(setting => setting.Key == "Stereotype" && setting.Value == "Widget");
    }
}

谢谢,伟大的向导。