2013-02-11 8 views
5

私のC#またはdreamweaverテンプレートでは、何をレンダリングするのかを知る必要があります。問題は、ページやコンポーネントを探しているかどうかわからないということです。私はおそらくpackage.GetByType(ContentType.Page)を使用することができ、それが空の場合 - コンポーネントの内容を取得することができますが、私はそこに短い方法があると感じています。ダビデのテンプレート内の現在のアイテムIDを見つける最も簡単な方法は何ですか

例はある短い:

私が見て、それは前にやった方法です
engine.PublishingContext.ResolvedItem.Item.Id 

答えて

5
engine.PublishingContext.ResolvedItem.Item.Id 

ます。また、公開コンテキストの解決項目をチェックし、それがページのかどうかを確認することができます(そうでない場合、それはコンポーネントの)。例えば

Item currentItem; 
if (engine.PublishingContext.ResolvedItem.Item is Page) 
{ 
    currentItem = package.GetByName(Package.PageName); 
} 
else 
{ 
    currentItem = package.GetByName(Package.ComponentName); 
} 
TcmUri currentId = engine.GetObject(currentItem).Id; 

あなたはengine.GetObject()の呼び出しをショートカットにしたい場合は、あなたが直接項目のXMLからIDを取得することができる場合があります

String currentId = currentItem.GetAsSource().GetValue("ID"); 
+0

私のアプローチよりもはるかに良いです。 –

3

:確か

// Contains the call you describe in your question 
Page page = GetPage(); 
if (page == null) 
{ 
    // Contains a call using package.GetByName("Component") 
    // to avoid the situation with multiple Components on the package 
    Component comp = GetComponent(); 
    // Do component stuff 
} 
else 
{ 
    // Do page stuff 
} 

ないが、あなたが本当にそれよりも非常に良く、それをカプセル化することができますが、私は証明することができます違う。

+0

あなたがいますright with package.GetByName( "Component") –

関連する問題