4

SDL Tridion の Content Manager テンプレート API (TOM.NET) は、公開またはレンダリング コンテキストを検出する方法を提供します。

ユースケース

  • 特定の環境にデバッグ情報を表示します (例: TCM Uris はステージングのみ)
  • プレビューで別のマークアップを表示する (例: 公開されたページへのリンクを表示する)
  • Experience Manager または SiteEdit でさまざまな作成可能なフィールドを表示する

私はいくつかの例を見て試してみましたが、同僚のStanEricの間のチャットをたどった後、TOM.NET (6.1 / Tridion 2011) を確実にフォローしたいと思います。

シナリオ

  1. 特定の発行ターゲットへの発行(通常は「ライブ」および「ステージング」)
  2. コンテンツ マネージャー エクスプローラー(CME) プレビュー
  3. Experience Manager (XPM) のセッション プレビューレンダリング
  4. (追加)テンプレートビルダー

1. ターゲットへの (またはパブリケーションからの) パブリッシュ

Tridion.ContentManager.Publishing.PublishEngine.GetPublishInfo(IdentifiableObject item)

項目はページまたはコンポーネントになります。PublishInfoこれはオブジェクトのコレクションを返します。これには、PublicationTarget発行先を確認するためのものが含まれます。

Tridion.ContentManager.Templating.PublishingContext.PublicationTargetも持っPublicationTargetています。

2. CME プレビュー

PublicationTarget はnullです。 Publication Target がないため、これは理にかなっています。:-)

3. セッションのプレビュー

RenderMode以下を持つ Enum を使用しTridion.ContentManager.Publishingます。

  • '公開' (0)
  • 'PreviewStatic' (1)
  • 「プレビューダイナミック」 (2)

PublicationTarget は、実際には公開nullされていないセッション プレビュー用ではありません。

4. (追加) テンプレートビルダー

?

Alexander Klockは、CME Preview を除くほとんどの関連例についても説明しています。

質問

  • 見落としているシナリオはありますか? 特定の公開ターゲット、通常のプレビュー、および XPM セッションのプレビューに公開しますか?

  • PublicationTarget をハードコーディングしないようにするにはどうすればよいですか (たとえば、TCM Uris ではなく文字列値を確認する方がよいでしょうか)。

  • 更新: Vikas の回答に従って、テンプレート ビルダーをリストに追加しました。テンプレート ビルダー内でレンダリングしていることを確認するにはどうすればよいですか?

4

2 に答える 2

4

この質問には本当にtl;drが必要です...

これが私が知っていることです:

テンプレートビルダー

パブリケーションターゲットがnull、RenderModeがPreviewDynamicです

CMEプレビュー

パブリケーションターゲットIDはtcm:0-0-0(またはTcmUri.UriNull)、RenderModeはPreviewDynamicです

セッションプレビュー

パブリケーションターゲットIDは実際のターゲットIDであり、RenderModeはPreviewDynamicです。

公開

パブリケーションターゲットIDは実際のものであり、RenderModeはパブリッシングです

編集

これは、現在のモードを判別するために最近作成したサンプルコードです。

private CurrentMode GetCurrentMode()
{
    RenderMode renderMode = _engine.RenderMode;
    if (renderMode == RenderMode.Publish) return CurrentMode.Publish;


    if (renderMode == RenderMode.PreviewDynamic)
    {
        if (_engine.PublishingContext.PublicationTarget == null) return CurrentMode.TemplateBuilder;
        PublicationTarget target = _engine.PublishingContext.PublicationTarget;
        if (target.Id.Equals(TcmUri.UriNull)) return CurrentMode.CmePreview;
        return CurrentMode.SessionPreview;
    }
    return CurrentMode.Unknown;
}

private enum CurrentMode
{
    TemplateBuilder,
    CmePreview,
    SessionPreview,
    Publish,
    Unknown
}
于 2013-02-01T08:31:09.590 に答える
4

完全な公開/プレビュー モデルの非常に優れたビューを提示しました。ここに私の考えがあります..

Are we missing any scenarios? 

テンプレートビルダーのケースを除いてすべてをカバーしたと思います.CMEプレビューに似ていますが、ターゲットをnullとして公開しますが、デバッグ目的で非常に重要なさまざまな条件をチェックするために使用できます.

How should I avoid hard-coding PublicationTargets  

はい、名前を使用でき、そのプログラムのそれぞれの構成ファイルで名前を構成できることを提案したため、どのコードでも tcm uri を使用しないでください。

また、ここでは関係ないかもしれませんが、ステージング以外の Tridion UI 編集用に別のターゲットを持つことは常に良いことです。両方とも、2 つのデプロイヤーを使用して同じサーバー上で構成できます。1 つは staging.yoursite.com で、もう 1 つは tridionui.yoursite.com です。

ありがとう..

于 2013-01-28T20:46:53.997 に答える