在基于.NET的CT组件的访问容器页(Access container page of a comp

2019-09-22 21:50发布

我们根据经纪查询机制(过滤器)开发基于CT一个.NET:

ComponentPresentationAssembler  cpAssembler = new ComponentPresentationAssembler(Page ID,Page object);

为了通过页面ID,我需要获得页面的访问哪个组件存在。 如何从包访问的页面? 由于这是一个CT,组件对象将是网页,而不是一个页面对象可用。 尝试下面的一段代码,但没有成功:

string pageURI = _package.GetValue("Page.ID");
Page objPage = (Page)_engine.GetSession().GetObject(pageURI);

这是行不通的,因为没有页面对象。 有什么办法,使我们可以从CT访问组件的父页面?

Answer 1:

为了解决这个问题,我创建一个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");
            }
        }
    }
}


Answer 2:

非常感谢杰里米。 我想这个代码,但无法使用该接口TemplateBase

从你的代码提示,我试过

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

这种运作良好。 我也能拿发布对象为:

Publication pub = (Publication)page.ContextRepository;

非常感谢你。



文章来源: Access container page of a component in .net based CT