如何使用TOM.NET检查发布或渲染上下文?

时间:2013-01-28 18:39:39

标签: tridion

SDL Tridion的Content Manager模板API(TOM.NET)提供了检测发布或呈现上下文的方法。

用例

  • 将调试信息呈现给特定环境(例如,仅在分段时使用TCM Uris)
  • 在预览中显示不同的标记(例如,显示指向已发布页面的链接)
  • 在Experience Manager或SiteEdit
  • 中显示不同的可作者字段

我已经看过并尝试了一些示例,但在跟随同事StanEric之后进行聊天之后,我想确保遵循TOM.NET(6.1 / Tridion 2011)。

方案

  1. 发布到特定的发布目标(通常为“实时”和“暂存”)
  2. Content Manager Explorer (CME)预览
  3. 会话预览呈现体验管理器(XPM)
  4. (已添加)模板生成器
  5. 1。发布到目标(或从出版物)

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

    项目将是一个页面或组件。这会返回PublishInfo个对象的集合,其中包含 PublicationTarget ,以确认您要发布到的位置。

    Tridion.ContentManager.Templating.PublishingContext.PublicationTarget也有PublicationTarget

    2。 CME预览

    PublicationTarget是null,这是有道理的,因为您没有发布目标。 : - )

    3。会话预览

    使用RenderMode下的Tridion.ContentManager.Publishing枚号,其中包含:

    • '发布'(0)
    • 'PreviewStatic'(1)
    • '预览动态'(2)
    对于会话预览,

    PublicationTarget不会是null,而实际上并非发布

    4。 (已添加)Template Builder

    Alexander Klock also describes some related examples除CME预览外,其中大部分内容都包含在内。

    问题(S)

    • 我是否遗漏了任何方案?发布到特定的发布目标,定期预览和XPM会话预览?

    • 我应该如何避免硬编码PublicationTargets(例如,检查字符串值而不是TCM Uris是否更好?)

    • 更新:根据Vikas的回答将模板生成器添加到列表中,我如何知道我在模板生成器中呈现?

2 个答案:

答案 0 :(得分:4)

您提供了完整发布/预览模型的非常好的视图。这是我的想法..

Are we missing any scenarios? 

我认为你涵盖了模板构建器案例的所有内容,它与CME预览类似,我们将发布目标作为null,但可用于检查不同的条件,这对于调试目的非常重要。

How should I avoid hard-coding PublicationTargets  

是的,我们不应该在任何代码中使用tcm uri,因为您建议我们可以使用名称,甚至可以在该程序的相应配置文件中配置名称。

此处也可能不相关,除了分段之外,Tridion UI编辑具有单独的目标总是好的。两者都可以在具有两个部署者的同一服务器上配置。一个可能是staging.yoursite.com,其他可能是tridionui.yoursite.com

谢谢..

答案 1 :(得分:4)

你真的需要一个关于这个问题的博士......

以下是我所知道的:

模板生成器

发布目标为空,RenderMode为PreviewDynamic

CME预览

发布目标ID为tcm:0-0-0(或TcmUri.UriNull),RenderMode为PreviewDynamic

会话预览

发布目标ID是真正的目标ID,RenderMode是PreviewDynamic

发布

发布目标ID是真实的,RenderMode是Publish

修改

这是我最近编写的一些示例代码,用于确定当前模式。

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
}