有谁知道是否可以从 Razor TBB 中读取页面模板元数据?我正在实施一个使用 960 网格系统构建的设计,为了保持 CT 的可重复使用性,我希望能够执行以下操作:
<div class="@Page.Template.Metadata.content_grid">
</div>
不幸的是,这会引发空引用异常。
我正在尝试的是可能的还是我需要编写一个自定义的 TBB 来将此信息添加到包中?
有谁知道是否可以从 Razor TBB 中读取页面模板元数据?我正在实施一个使用 960 网格系统构建的设计,为了保持 CT 的可重复使用性,我希望能够执行以下操作:
<div class="@Page.Template.Metadata.content_grid">
</div>
不幸的是,这会引发空引用异常。
我正在尝试的是可能的还是我需要编写一个自定义的 TBB 来将此信息添加到包中?
在前往亚历克斯的博客提问后,我看到他已经为其他人回答了这个问题:
关于获取模板元数据......不幸的是,我还没有为模板本身创建一个包装器,现在公开的 @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。
我能够使用以下代码为组件模板元数据获取此信息:
@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 形式返回。在我的代码中,“位置”只是一个字符串。我想如果您使用分类法,这可能会有所不同。
谢谢,乔纳森
PS 我使用的是 Razor Mediator 1.2 版