我们正在开发基于Broker查询机制(过滤器)的基于.net的CT:
ComponentPresentationAssembler cpAssembler = new ComponentPresentationAssembler(Page ID,Page object);
为了传递页面ID,我需要访问组件所在的页面。 如何从包中访问该页面?由于这是一个CT,一个组件对象将在页面中可用,而不是页面对象。 尝试了以下代码,但没有成功:
string pageURI = _package.GetValue("Page.ID");
Page objPage = (Page)_engine.GetSession().GetObject(pageURI);
这不起作用,因为没有页面对象。有什么选择,以便我们可以从CT访问组件的父页面?
答案 0 :(得分:5)
为了解决这个问题,我创建了一个AddPageToComponentPresentation TBB。这是代码:
using System;
using System.Collections.Generic;
using System.Text;
using Tridion.ContentManager;
using Tridion.ContentManager.Templating;
using Tridion.ContentManager.Templating.Assembly;
namespace Tridion.Extensions.ContentManager.Templating {
[TcmTemplateTitle("Add Page To ComponentPresentation")]
class AddPageToComponentPresentation : TemplateBase {
public override void Transform(Engine engine, Package package) {
if (engine.PublishingContext.RenderContext.ContextItem != null) {
Item pageItem = package.CreateTridionItem(ContentType.Page, engine.PublishingContext.RenderContext.ContextItem.Id);
package.PushItem("Page", pageItem);
Logger.Debug("Page Item added to Package");
} else {
Logger.Debug("No Context Item found");
}
}
}
}
答案 1 :(得分:-1)
非常感谢杰里米。 我尝试了这段代码,但无法使用界面 TemplateBase
使用代码中的提示,我尝试了
Page page = _engine.PublishingContext.RenderContext.ContextItem as Page;
这很有效。我也可以将发布对象作为:
Publication pub = (Publication)page.ContextRepository;
非常感谢。