私の C# または Dreamweaver テンプレートでは、何をレンダリングしているかを知る必要があります。問題は、探しているのがページなのかコンポーネントなのかよくわからないことです。おそらく使用できpackage.GetByType(ContentType.Page)
、空の場合はコンポーネントのコンテンツを取得できますが、もっと短い方法があるはずだと思います。
David の例は短いです:
engine.PublishingContext.ResolvedItem.Item.Id
私の C# または Dreamweaver テンプレートでは、何をレンダリングしているかを知る必要があります。問題は、探しているのがページなのかコンポーネントなのかよくわからないことです。おそらく使用できpackage.GetByType(ContentType.Page)
、空の場合はコンポーネントのコンテンツを取得できますが、もっと短い方法があるはずだと思います。
David の例は短いです:
engine.PublishingContext.ResolvedItem.Item.Id
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");
それが私が以前に見た方法です:
// 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
}
それよりもはるかにうまくカプセル化できるかどうかはわかりませんが、間違っていることが証明されるかもしれません。