Tridion 从TBB访问页面模板元数据

Tridion 从TBB访问页面模板元数据,tridion,Tridion,有人知道是否有可能从TBB中读取页面模板元数据吗?我正在实施一项使用960网格系统构建的设计,为了保持CT的可重用性,我希望能够做到以下几点: <div class="@Page.Template.Metadata.content_grid"> </div> 不幸的是,这会引发空引用异常 我正在尝试的是可能的,还是我需要编写一个自定义TBB来将此信息添加到包中?在前往Alex的博客提问后,我发现他已经: 关于获取模板元数据…不幸的是,我没有 为模板本身创建了一个包装

有人知道是否有可能从TBB中读取页面模板元数据吗?我正在实施一项使用960网格系统构建的设计,为了保持CT的可重用性,我希望能够做到以下几点:

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

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


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

在前往Alex的博客提问后,我发现他已经:

关于获取模板元数据…不幸的是,我没有 为模板本身创建了一个包装器,@Template 现在暴露出来的只是 Tridion.ContentManager.CommunicationManagement.Template one,其中 这意味着现在你必须把模板字段从老式的模式中去掉 方式:

@{Tridion.ContentManager.ContentManagement.Fields.ItemFields templateFields=新建 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>
}
@if(Page.Template.Metadata!=null&&Page.Template.Metadata[“内容网格”!=null){
@调试(string.Format(“内容网格值为{0}”,Page.Template.Metadata[“内容网格”].InnerText))
}
请注意.InnerText和not.Value作为内容网格以xml形式返回。在我的代码中,“position”只是一个字符串。我想如果你使用分类法,这可能会有所不同

谢谢, 乔纳森


另外,我正在使用Razor Mediator的1.2版

我还没有看到Alex出现在互联网的这一边,我可能会在他的博客上发布:感谢链接-看起来他正在计划将此作为v1.3的附加功能