Orchardcms 基于标签的果园轮换
我想根据内容项的标记值为其创建替代项 例如,我想创建一个名为Orchardcms 基于标签的果园轮换,orchardcms,orchardcms-1.6,Orchardcms,Orchardcms 1.6,我想根据内容项的标记值为其创建替代项 例如,我想创建一个名为List ProjectionPage tags special 搜索网络将指导我实现一个新的ShapeDisplayEvents 因此,我有 public class TagAlternatesFactory : ShapeDisplayEvents { public TagAlternatesFactory() { } public override void Displaying(ShapeDis
List ProjectionPage tags special
搜索网络将指导我实现一个新的ShapeDisplayEvents
因此,我有
public class TagAlternatesFactory : ShapeDisplayEvents
{
public TagAlternatesFactory()
{
}
public override void Displaying(ShapeDisplayingContext context)
{
}
}
在Displaying
方法中,我认为我需要从context.Shape中检查contentItem,并根据它创建一个备用名称(假设它将TagsPart添加到content项中)
但是,我该怎么处理它呢?如何添加候补者的名称?这就是创建新的替代类型所需的全部内容吗?乌节会不会知道如何查找
列表项目页面标签特别的
以下是我的实现:
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
}
});
}
}
公共类标记AlternateSFactory:ShapeDisplayEvents
{
公共覆盖无效显示(ShapeDisplayingContext)
{
context.ShapeMetadata.ondisplay(displayedContext=>
{
var contentItem=displayedContext.Shape.contentItem;
var contentType=contentItem.contentType;
var parts=contentItem.parts作为IEnumerable;
if(parts==null)返回;
var tagsPart=parts.FirstOrDefault(part=>part为tagsPart)作为tagsPart;
if(tagsPart==null)返回;
foreach(tagsPart.CurrentTags中的var标记)
{
displayedContext.ShapeMetadata.Alternates.Add(
String.Format(“{0}{1}{2}{3}”,
displayedContext.ShapeMetadata.Type,(string)contentType,“tag”,tag.TagName));//参见更新
}
});
}
}
这允许基于标记值的备用视图。因此,如果您有一个要应用特定样式的项目页面,您只需使用名称ProjectionPage\u tag\u special
创建备用视图,并且只要在任何时候您想要一个投影页面使用它,就可以向其添加special
标记
更新
我在备用名称中添加了displayedContext.ShapeMetadata.Type
,以便可以覆盖特定的形状(如列表项目页面)如果有多个标记,该怎么办?每个标签一个备用?你有没有检查过其他类中添加替换的代码?@BertrandLeRoy我将为每个标记ATM使用一个替换。