(ContentType/DisplayType)-特定于 Orchard 中布局形状的替代品
(ContentType/DisplayType)-specific alternate to Layout shape in Orchard
我用Orchard 1.10.1
。
是否可以在 Orchard 中创建一个特定于(ContentType
/DisplayType
)的布局形状替代品?
我需要 Displaytype
详细信息中 CustomContentType
的布局替代方案。
提前致谢。
布局形状似乎没有开箱即用的替代设置:
如果您向下滚动到下一个,Zone
然后您会看到它有一个 OnDisplaying()
事件处理程序,它在末尾添加了替代项。
我不确定是否有我不知道的支持此功能的内置技巧。假设没有任何我也不知道的 "Layout" 的特殊外壳,您可以制作自己的 IShapeTableProvider
并添加一些替代项以满足您的要求。
似乎 a tutorial over on Bertrands blog 解释了如何执行此操作的一些想法。
在评论中它还提到您可以启用形状追踪器的 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");
}
}
我用Orchard 1.10.1
。
是否可以在 Orchard 中创建一个特定于(ContentType
/DisplayType
)的布局形状替代品?
我需要 Displaytype
详细信息中 CustomContentType
的布局替代方案。
提前致谢。
布局形状似乎没有开箱即用的替代设置:
如果您向下滚动到下一个,Zone
然后您会看到它有一个 OnDisplaying()
事件处理程序,它在末尾添加了替代项。
我不确定是否有我不知道的支持此功能的内置技巧。假设没有任何我也不知道的 "Layout" 的特殊外壳,您可以制作自己的 IShapeTableProvider
并添加一些替代项以满足您的要求。
似乎 a tutorial over on Bertrands blog 解释了如何执行此操作的一些想法。
在评论中它还提到您可以启用形状追踪器的 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");
}
}