在模板中查找当前项ID的最简单方法是什么

时间:2013-02-11 09:39:17

标签: tridion tridion-2011

在我的C#或Dreamweaver模板中,我需要知道我在渲染什么。问题是我不确定我是否在寻找页面或组件。我可以使用package.GetByType(ContentType.Page),如果它是空的 - 获取组件的内容,但我觉得应该有一个更短的方式。

大卫的例子较短:

engine.PublishingContext.ResolvedItem.Item.Id

2 个答案:

答案 0 :(得分: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(),那么你可以直接从Item的XML中获取ID:

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

答案 1 :(得分: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
}

不确定你是否可以将它封装得比实际更好,但我可能被证明是错误的。