2012-03-30 11 views
10

En la plantilla HTML para mi componente que necesito para escribir el TCM URI de la plantilla de componentes: no existe¿Cómo puedo acceder al ID de la plantilla de componente desde mi componente DWT?

<!-- Start Component Presentation: {"ComponentID" : "@@[email protected]@", 
         "ComponentTemplateID" : "@@[email protected]@" } --> 

Pero, por desgracia ComponentTemplate.ID.

¿Cómo puedo acceder a la ID de la plantilla de componente desde mi componente DWT?

Respuesta

11

me temo que tendrá que escribir una C# TBB (fragmento o ensamblaje):

TcmUri templateId = engine.PublishingContext.ResolvedItem.Template.Id; 
if (templateId.ItemType == ItemType.ComponentTemplate) { 
    Item item = package.CreateStringItem(ContentType.Text, templateId.ToString()); 
    package.PushItem("ComponentTemplateID", item); 
} 

Sólo se puede acceder al ComponentTemplate.ID desde dentro de un diseño de página DWT ...

+0

No es exactamente 'acceso', pero si el DWT se usa solo con cierta plantilla, ¿podría codificarlo? Lo que estoy diciendo, esto es @Frank de lo que estamos hablando. –

+0

Esto puede ser Frank, pero en este caso está trabajando en un sitio web algo realista por una vez. Desafortunadamente, la codificación difícil no es una opción. Escribir toneladas de código para resolver el problema, es una opción; entonces estoy tomando la sugerencia de Mihai, pero luego la pongo en una fuente de función a la que puedo llamar desde mi DWT @@ GetComponentTemplate() @@ –

+1

. Tal vez no necesiten toneladas de código. Aparentemente, @@ ID @@ devuelve la Id. De la plantilla del componente en Vista previa y publicación, pero no en el Creador de plantillas. Por ejemplo, '@@ Component.ID @@ @@ ID @@' me da 'tcm: 6-1541 tcm: 6-1541' en Template Builder, pero' tcm: 6-1541 tcm: 7-81-32' en Vista previa. –

1

Agregue un parámetro "ComponentTemplateID" a la Invocación de plantilla en la plantilla compuesta. A continuación, puede acceder a esto de la misma manera que las variables del paquete.

+1

Aunque es una alternativa interesante, aún tendría que escribir ese valor de parámetro manualmente. Por lo tanto, acciones como copiar/pegar, portar o localizar el CT harán que el valor del parámetro sea incorrecto. –

+0

De hecho Frank. A menudo prefiero hacer cosas con configuración en lugar de código, pero tal vez he ido un poco lejos. No me importa que alguien copie/pegue tener que arreglarlo, y no me importa tener un diseño técnico que prohíbe la localización del CT, pero el problema de portabilidad es demasiado desagradable. +1 a la solución de Mihai entonces. –

1

@@[email protected]@ le dará el URI de TCM de la plantilla de componentes al obtener una vista previa (en el CME, no en el Creador de plantillas) o en la publicación.

Cuestiones relacionadas