在我的 C# 或 dreamweaver 模板中,我需要知道我在渲染什么。问题是我不确定我是否在寻找页面或组件。如果它是空的,我可能会使用package.GetByType(ContentType.Page)
- 获取组件的内容,但我觉得应该有更短的方法。
大卫的例子更短:
engine.PublishingContext.ResolvedItem.Item.Id
在我的 C# 或 dreamweaver 模板中,我需要知道我在渲染什么。问题是我不确定我是否在寻找页面或组件。如果它是空的,我可能会使用package.GetByType(ContentType.Page)
- 获取组件的内容,但我觉得应该有更短的方法。
大卫的例子更短:
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() 调用,那么您可以直接从 Item 的 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
}
不确定你能不能把它封装得比这更好,但我可能被证明是错误的。