2012-05-11 11 views
9

¿Alguien sabe si es posible leer los metadatos de la plantilla de página desde un Rabinar TBB? Estoy poniendo en práctica un diseño que se ha construido utilizando el sistema de la rejilla 960 y para mantener reutilizable de mi CT Tenía la esperanza de poder hacer algo como:Acceso a metadatos de plantilla de página desde un Razor TBB

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

Desafortunadamente esto arroja una excepción de referencia nula.

¿Es posible que lo intente o debo escribir un TBB personalizado para agregar esta información al paquete?

+1

No he visto a Alex llegar a este lado de Internet, probablemente lo publicaría en su blog: http://www.codedweapon.com/ –

+0

Gracias por el enlace - parece que está planeando esto como una funcionalidad adicional para v1.3 – richeym

Respuesta

5

Después de dirigirse al blog de Alex a hacer la pregunta, veo que él ya answered it for someone else:

En cuanto a conseguir plantilla de metadatos a cabo ... por desgracia no creado un envoltorio sin embargo, para la propia plantilla, el @ plantilla que es expuesta en este momento es sólo el Tridion.ContentManager.CommunicationManagement.Template uno, lo que significa por ahora se tendrá que obtener campos de la plantilla, de la vieja usanza manera:

@ {Tridion.ContentManager.ContentManagement.Fields.ItemFields templateFields = new ContentManager.ContentManagement.Fields.ItemFields (Template.Metadata, Template.MetadataSchema); }

He añadido esto en mi lista de tareas ahora, sin embargo, por lo que estará seguro de ver un envoltorio de conveniencia que le permitirá hacer @ Template.MetaData.YourField en la versión 1.3.

0

que era capaz de conseguir esto para Componente plantilla de metadatos utilizando el siguiente código:

@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() 
     } 
    } 
} 

Por lo tanto, creo que usted debería ser capaz de usar algo similar a lo siguiente:

@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> 
} 

Tenga en cuenta que .InnerText y no .Value como content_grid se devuelve como xml. En mi código 'posición' era solo una cadena. Supongo que esto puede ser diferente si usa la taxonomía.

Gracias, Jonathan

P. S. Estoy usando la versión 1.2 del Mediador Razor

Cuestiones relacionadas