我想基于其标记值为内容项创建替代项。
例如,我想创建一个名为List-ProjectionPage-tags-special
搜索网络会指示我实施新的ShapeDisplayEvents
因此,我有
public class TagAlternatesFactory : ShapeDisplayEvents
{
public TagAlternatesFactory()
{
}
public override void Displaying(ShapeDisplayingContext context)
{
}
}
在Displaying
方法中,我相信我需要检查context.Shape中的contentItem并根据它创建一个备用名称(假设它已将TagsPart添加到内容项中)。
但是,我该怎么办呢?如何添加备用名称?是否需要创建新的备用类型?果园会知道找List-ProjectionPage-tags-special
吗?
答案 0 :(得分:2)
我从Bertrand的评论中得到了启示,并查看了一些Orchard来源的方向。
这是我的实施:
public class TagAlternatesFactory : ShapeDisplayEvents
{
public override void Displaying(ShapeDisplayingContext context)
{
context.ShapeMetadata.OnDisplaying(displayedContext =>
{
var contentItem = displayedContext.Shape.ContentItem;
var contentType = contentItem.ContentType;
var parts = contentItem.Parts as IEnumerable<ContentPart>;
if (parts == null) return;
var tagsPart = parts.FirstOrDefault(part => part is TagsPart) as TagsPart;
if (tagsPart == null) return;
foreach (var tag in tagsPart.CurrentTags)
{
displayedContext.ShapeMetadata.Alternates.Add(
String.Format("{0}__{1}__{2}__{3}",
displayedContext.ShapeMetadata.Type, (string)contentType, "tag", tag.TagName)); //See update
}
});
}
}
这允许基于标记值的备用视图。因此,如果您有一个要应用特定样式的项目页面,则只需创建名为ProjectionPage_tag_special
的备用视图,并且只要您希望投影页面使用它,只需添加{{1标记到它。
<强>更新强>
我将special
添加到备用名称中,以便可以覆盖特定的形状(如List-ProjectionPage)