2012-03-30 4 views
10

私はコンポーネントテンプレートのTCM URIを記述する必要があります。コンポーネントDWT内からコンポーネントテンプレートIDにアクセスするにはどうすればよいですか?私のコンポーネントのHTMLテンプレートで

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

しかし残念ながらComponentTemplate.IDは存在しません。

コンポーネントDWT内からコンポーネントテンプレートIDにアクセスするにはどうすればよいですか?

答えて

11

私はあなたがC#TBB(フラグメントまたはアセンブリ)を記述する必要があります怖い:

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

あなただけ

+0

正確には「アクセス」ではありませんが、DWTが特定のテンプレートでのみ使用されている場合は、ハードコードできますか?私は何を言っている、これは私が話しているフランクです。 –

+0

これはFrankかもしれませんが、彼はこの場合、やや現実的なWebサイトで一度作業しています。残念ながらハードコーディングはオプションではありません。しかし、問題を解決するためにたくさんのコードを書くことはオプションです。私はこれまでMihaiの提案を受けていますが、DWT @ @ GetComponentTemplate()@@ –

+1

から呼び出すことのできる関数のソースに入れてください。大量のコードは必要ないかもしれません。どうやら@@ ID @@は、プレビューとパブリッシュでコンポーネントテンプレートIDを返しますが、テンプレートビルダーでは返しません。例えば、 '@@ Component.ID @@ @@ ID @@'はテンプレートビルダーでは 'tcm:6-1541 tcm:6-1541'ですが、' tcm:6-1541 tcm:7-81-32'プレビューで –

1
...ページDWTレイアウト内からComponentTemplate.IDにアクセスすることができます

複合テンプレートのテンプレート呼び出しに "ComponentTemplateID"パラメータを追加します。パッケージ変数と同じ方法でこれにアクセスできます。

+1

興味深い選択肢ですが、手動でそのパラメータ値を入力する必要があります。したがって、コピー/貼り付け、CTの移植またはローカライズのようなアクションは、パラメータ値を不正確にします。 –

+0

確かにフランク。私はしばしばコードではなく設定でやることを好むが、多分私は少し遠くに行ったかもしれない。私はコピー/貼り付けをしなければならない人は気にしません。CTをローカライズすることを禁止するテクニカルデザインは気にしませんが、移植の問題はあまりにも面倒です。それからミハイの解決策に+1してください。 –

1

@@[email protected]@はプレビュー(CMEではテンプレートビルダーではない)または公開時にコンポーネントテンプレートTCM URIを提供します。

関連する問題