4

ブローカー クエリ メカニズム (フィルター) に基づく .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 に答える