4

我们正在开发基于 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 访问组件的父页面?

4

2 回答 2

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");
            }
        }
    }
}
于 2012-09-24T09:46:56.207 回答
-1

非常感谢杰里米。我尝试了这段代码,但无法使用接口TemplateBase

根据您的代码提示,我尝试了

Page page = _engine.PublishingContext.RenderContext.ContextItem as Page;

这很好用。我也可以获得发布对象:

Publication pub = (Publication)page.ContextRepository;

非常感谢你。

于 2012-09-24T11:16:08.840 回答