自定义果园主题部分

时间:2011-02-05 15:22:18

标签: .net asp.net asp.net-mvc orchardcms

我正在尝试为果园编写一个自定义主题,到目前为止还没有取得多大成功。我已经阅读了关于部分候补的Bertrand Le Roy's文章,但我似乎无法让它发挥作用。

我在首页上显示最近的博客文章列表,非常标准。我希望更改元数据部分产生的标记,即时间格式。

我已经编写了IShapeTableProvider来为元数据摘要部分创建特定于博客的备用项。

public class MetaDataShapeProvider : IShapeTableProvider
{
    private readonly IWorkContextAccessor workContextAccessor;

    public MetaDataShapeProvider(IWorkContextAccessor workContextAccessor)
    {
        this.workContextAccessor = workContextAccessor;
    }

    public void Discover(ShapeTableBuilder builder)
    {
        builder
          .Describe("Parts_Common_Metadata_Summary")
          .OnDisplaying(displaying =>
          {
              ContentItem contentItem = displaying.Shape.ContentItem;
              if (contentItem != null)
                displaying.ShapeMetadata.Alternates.Add("Metadata__" + contentItem.ContentType);
          });
    }
}

正确捕获此内容但contentItem为null。我是否应该创建一个具有固定名称的替代品,如“Metadata-BlogPost”并使用它,为了实现这个通用目的,它应该是一个动态名称,以便我可以在其他地方使用另一个替代模板。

谢谢,

伊恩

1 个答案:

答案 0 :(得分:1)

尝试从呈现形状的内容部分中获取内容项,例如:

displaying.Shape.ContentPart.ContentItem;

而不是

displaying.Shape.ContentItem;

Parts_Common_Metadata_Summary 形状获取作为命名参数 ContentPart 传递的相关内容部件对象,因此应该这样做。

HTH