有没有人知道是否可以从Razor TBB中读取页面模板元数据?我正在实现一个使用960网格系统构建的设计并保持我的CT可重用性我希望能够做到这样的事情:
<div class="@Page.Template.Metadata.content_grid">
</div>
不幸的是,这会引发空引用异常。
我正在尝试使用或是否需要编写自定义TBB以将此信息添加到包中?
答案 0 :(得分:5)
在前往Alex的博客上提问后,我发现他已经answered it for someone else了:
关于获取模板元数据...遗憾的是我还没有 为模板本身创建了一个包装器,即@Template 现在暴露只是 Tridion.ContentManager.CommunicationManagement.Template一个,其中 意味着你现在必须得到老式的模板字段 方式:
@ {Tridion.ContentManager.ContentManagement.Fields.ItemFields templateFields = new ContentManager.ContentManagement.Fields.ItemFields(Template.Metadata, Template.MetadataSchema); }
我现在已经在我的待办事项列表中添加了这个,所以你一定会看到 一个方便的包装,可以让你做 版本1.3中的@ Template.MetaData.YourField。
答案 1 :(得分:0)
我能够使用以下代码获取组件模板元数据:
@foreach (var cp in ComponentPresentations) {
@if (cp.Template.Metadata != null && cp.Template.Metadata["position"] != null){
@Debug(string.Format("The Component Template position is {0}", cp.Template.Metadata["position"].InnerText))
@if (cp.Template.Metadata["position"].InnerText.ToLower().Equals("main")){
@cp.RenderComponentPresentation()
}
}
}
因此,我认为您应该可以使用类似于以下内容的内容:
@if (Page.Template.Metadata != null && Page.Template.Metadata["content_grid"] != null){
@Debug(string.Format("The content_grid value is {0}", Page.Template.Metadata["content_grid"].InnerText))
<div class="@Page.Template.Metadata["content_grid"].InnerText">
</div>
}
请注意.InnerText而不是.Value,因为content_grid以xml的形式返回。在我的代码中,'position'只是一个字符串。我想如果你使用分类法,这可能会有所不同。
谢谢, 乔纳森
P.S。我使用的是Razor Mediator的1.2版本