2012-03-30 60 views

回答

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); 
} 

只能從頁面佈局DWT內訪問ComponentTemplate.ID ...

+0

不完全'訪問',但如果DWT僅與特定模板一起使用,您可以對其進行硬編碼嗎?我在說什麼,這是@Frank我們正在談論。 – 2012-03-30 11:55:22

+0

這可能是弗蘭克,但他在這種情況下工作在一個有點現實的網站上一次。所以不幸的是,硬編碼不是一種選擇。寫很多代碼來解決這個問題,雖然是一個選擇;所以我到目前爲止採取Mihai的建議,但然後把它放在一個函數源,我可以從我的DWT調用@@ GetComponentTemplate()@@ – 2012-03-30 12:54:21

+1

也許噸代碼是不需要的。顯然,@@ ID @@返回預覽和發佈中的組件模板ID,但不是模板生成器。例如,'@@ Component.ID @@ @@ ID @@'在Template Builder中給我'tcm:6-1541 tcm:6-1541',但'tcm:6-1541 tcm:7-81-32'在預覽中。 – 2013-01-10 21:22:25

1

將「ComponentTemplateID」參數添加到複合模板中的模板調用中。然後可以像包變量一樣訪問它。

+1

雖然是一個有趣的選擇,但我仍然必須手動輸入該參數值。因此,複製/粘貼,移植或本地化CT等操作將導致參數值錯誤。 – 2012-03-30 20:00:10

+0

弗蘭克。我經常喜歡用配置而不是代碼來做事情,但也許我已經走了很遠。我不介意那些複製/粘貼的人不得不修理它,我不介意有一種技術設計可以將CT局部化,但是移植問題太令人討厭了。然後+1給Mihai的解決方案。 – 2012-04-01 17:14:14

1

@@[email protected]@將在預覽(在CME中,不在模板生成器中)或發佈時爲您提供組件模板TCM URI。