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

时间:2012-05-11 10:55:56

标签: tridion

有没有人知道是否可以从Razor TBB中读取页面模板元数据?我正在实现一个使用960网格系统构建的设计并保持我的CT可重用性我希望能够做到这样的事情:

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

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

我正在尝试使用或是否需要编写自定义TBB以将此信息添加到包中?

2 个答案:

答案 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版本