9

有谁知道是否可以从 Razor TBB 中读取页面模板元数据?我正在实施一个使用 960 网格系统构建的设计,为了保持 CT 的可重复使用性,我希望能够执行以下操作:

<div class="@Page.Template.Metadata.content_grid">
</div>

不幸的是,这会引发空引用异常。

我正在尝试的是可能的还是我需要编写一个自定义的 TBB 来将此信息添加到包中?

4

2 回答 2

5

在前往亚历克斯的博客提问后,我看到他已经为其他人回答了这个问题:

关于获取模板元数据......不幸的是,我还没有为模板本身创建一个包装器,现在公开的 @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。

于 2012-05-11T12:49:52.740 回答
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 形式返回。在我的代码中,“位置”只是一个字符串。我想如果您使用分类法,这可能会有所不同。

谢谢,乔纳森

PS 我使用的是 Razor Mediator 1.2 版

于 2012-07-01T10:28:46.383 回答