(ContentType / DisplayType) - Orchard中布局形状的替代

时间:2016-09-18 10:49:40

标签: orchardcms

我使用Orchard 1.10.1

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

我需要CustomContentType详细信息中Displaytype的布局的特定替代。

先谢谢。

2 个答案:

答案 0 :(得分:1)

看起来布局形状没有开箱即用的替代设置:

如果向下滚动到下一个Zone,那么您将看到它有一个OnDisplaying()事件处理程序,最后添加了Alternates。

我不确定是否有一个内置的技巧支持我不知道的。假设没有任何特殊的“布局”外壳,我也不知道,你可以制作自己的IShapeTableProvider,增加一些替代品以符合你的要求。

似乎有a tutorial over on Bertrands blog解释了如何做到这一点的一些想法。

在评论中,它还提到您可以启用Shape Tracer的Url Alternates功能,这可能有助于您对此进行排序。

答案 1 :(得分:0)

以下是基于ContentType的布局交替提供程序的示例:

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