2012-09-20 45 views
3

這與XSLT question類似,但最終對於DWT。我應該如何從DWT獲得關鍵字密鑰

我們可以得到一個keyword's key via a C# TBB。

ItemFields fields = new ItemFields(component.Metadata, component.Schema); 
KeywordField keywordField = fields["state"] as KeywordField; 

String stateValue = package.EvaluateExpression("Component.Metadata.state"); 

package.PushItem("statekey", package.CreateStringItem(ContentType.Text, keywordField.Value.Key)); 

在DWT,我想有時在組件選擇的關鍵字的key

添加並從包中獲取這些正確的方法?

@@[email protected]@得到我的價值。直接從DWT引用密鑰會很好,但我沒有看到任何建議DWT公開它的密鑰。

回答

3

的另一個替代約翰的回答。如何對Will的「獲取組件模板Uris」採取類似的方法,然後編寫一個TBB來遍歷一個類別的關鍵字,並將它們寫入包中並獲得所需的輸出值?然後,您可以直接從DWT中使用這些值,並進行「雙重評估」:

@@Keyword${Component.Metadata.state}[email protected]@ 
+0

聰明,我喜歡這種方式,這讓我們挑選何時拿到鑰匙。我認爲我們可以爲關鍵字元數據做同樣的事情。 –

+2

你幾乎可以做任何事情。它只是預取數據。在CT URI的情況下,它允許您避免對它們進行硬編碼。在這種情況下,它允許您輕鬆訪問通常不可用的值。缺點是它在處理器週期和內存方面略微浪費(獲取和存儲所有不必要/未使用的數據) –

3

我懷疑爲此,您需要按照您的建議走下TBB路線,或者編寫自己的DWT函數來公開它。

您可以在這裏找到創造DWT功能的例子:http://www.tridiondeveloper.com/get-and-set-variables-in-dwts

+1

很好的答案。我認爲你需要解決一個自定義函數的唯一潛在問題是,DWT只公開關鍵字值而不是它的URI,也沒有關於關鍵字來自的類別的任何信息,所以你的C#代碼將不得不搜索關鍵字(並希望它是唯一的)跨所有類別,或允許傳遞類別名稱/ URI,並且您需要在DWT中對其進行硬編碼。 –

+0

我看到 - 從DWT的關鍵字只有「文字」。我投票贊成考夫曼的想法,允許[通過鍵獲得關鍵字的能力](http://ideas.sdltridion.com/ideas/detail.asp?i=3916),並留下了一個待定的評論,要求反對 - 通過關鍵字獲取密鑰(在DWT中)。 –

相關問題