2012-03-30 4 views

risposta

11

temo che dovrete scrivere un C# TBB (frammento o assieme):

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

È possibile accedere solo al ComponentTemplate.ID all'interno di un layout di pagina DWT ...

+0

Non esattamente "accesso", ma se il DWT viene utilizzato solo con un determinato modello, è possibile indicarlo a fondo? Cosa sto dicendo, questo è @ Frank di cui stiamo parlando. –

+0

Questo potrebbe essere Frank, ma in questo caso sta lavorando su un sito web piuttosto realistico per una volta. Quindi sfortunatamente codifica non è un'opzione. Scrivere un sacco di codice per risolvere il problema è un'opzione; quindi sto così lontano prendendo il suggerimento di Mihai, ma poi lo metto in una sorgente di funzioni che posso chiamare dal mio DWT @@ GetComponentTemplate() @@ –

+1

Forse non sono necessarie tonnellate di codice. Apparentemente @@ ID @@ restituisce l'ID del modello di componente in Anteprima e pubblicazione, ma non in Template Builder. Ad esempio, '@@ Component.ID @@ @@ ID @@' mi fornisce 'tcm: 6-1541 tcm: 6-1541' in Template Builder, ma' tcm: 6-1541 tcm: 7-81-32' in anteprima. –

1

Aggiungere un parametro "ComponentTemplateID" all'Invocazione modello nel modello composto. È quindi possibile accedervi allo stesso modo delle variabili del pacchetto.

+1

Sebbene sia un'interessante alternativa, dovrei comunque digitare manualmente quel valore di parametro. Quindi l'azione come copia/incolla, porting o localizzazione del CT renderà il valore del parametro errato. –

+0

Davvero Frank. Spesso preferisco fare le cose con la configurazione piuttosto che con il codice, ma forse sono andato un po 'lontano. Non mi importa di chi copia/incolla dovendo sistemarlo, e non mi dispiace avere un disegno tecnico che mette fuori legge la localizzazione della CT, ma il problema di porting è semplicemente troppo brutto. +1 alla soluzione di Mihai allora. –

1

@@[email protected]@ fornisce l'URI TCM del modello di componenti durante l'anteprima (nella CME, non nel Template Builder) o nella Pubblicazione.