-1

我们在 Tridion 2011 的文件夹中迭代组件,并根据组件的发布状态创建自定义 XML 以在 CDS 上使用。我给出下面的例子来让你理解这个问题。

  1. 假设我们在一个文件夹中有 10 个组件都已发布,并且我们发布了我们的 XML,然后为 10 个项目生成 XML。
  2. 现在我们对其中一个组件进行更改并且不发布它。
  3. 组件修改后,我们再次发布 XML。然后 XML 也会针对修改后的组件进行更新。因此,它会在该组件的已发布版本与我们的 XML 中的版本之间产生差异。

所以我想以这样一种方式发布自定义 XML,它应该只包含与已发布版本的组件同步的数据。

4

3 回答 3

2

所以你想:

  1. 确定上次发布的组件的 XML
  2. 确定该 XML 与组件的当前 XML 之间的更改
  3. 仅发布更改

Tridion 不跟踪已发布的版本(至少在内容管理器上)。因此,您可以做的最接近的事情是找出组件上次发布的时间并检索该时间的 XML。这个问题是了解有关该方法的更多信息的一个很好的起点。然后基于该 XML,您可以执行上面的步骤 2 和 3。

或者,您可以在呈现组件时保留您在“某处”(例如在应用程序数据中)发布的 XML 的快照。然后,当下次发布组件时,您可以检索该 XML 并执行上面的步骤 2 和 3。

请注意,对于这些解决方案中的任何一个,您都应该真正想知道是否应该从一开始就实施它。您正在覆盖 Tridion 的一些默认渲染行为并规避其架构的一部分(内容管理和内容交付之间的明确、明确的脱节,前者对后者“一无所知”)并且您所做的任何事情都会回来困扰您时间。在这个用例中,您必须想知道当 CDS 和 TCM 不同步时会发生什么。突然重新发布内容已经不够好,因为您的代码将在那里决定“自上次发布以来没有任何变化,所以我们什么都不会发布”。

于 2012-07-23T18:18:01.160 回答
2

如果我妄下结论,请原谅我,但我强烈认为这个问题源于对 Tridion 缺乏了解。在 Tridion 中发布不仅仅是举起一个标志来表明该项目已“发布”,换句话说,它已准备好向外界展示。我知道这就是一些(许多)内容管理系统的运作方式(这可以解释你为什么问这个问题)。然而,在 Tridion 中,发布意味着项目实际上(物理上)从内容管理环境转移到内容交付环境。此环境始终包含您的内容版本,这些版本代表项目上次发布时的状态 - 仅仅是因为正是发布行为创建了它们。

在我看来,您真正要问的是如何重建此发布功能。这从来都不是一个好主意。相反,您应该认真对待 Bart 的评论并查看 Tridion 提供的内容交付 API 之一(代理 API 或 OData Web 服务)。或者,您可能想要查看 DD4T,它构建在代理之上并公开了完整的 Tridion 数据模型。

于 2012-07-25T12:55:19.700 回答
1

那么你的解决方案是

  1. 在 Publish Transaction Save 事件上编写事件处理程序
  2. 它将发布信息(版本数据)保存到已发布组件的应用程序数据中

我提到了 Publish Transaction Save 事件,因为从那里您可以确保仅在事务成功时才保存发布信息。

另请注意,当事件处理程序无法执行时,此发布信息可能会不同步,并且在移动到另一个环境时可能会丢失所有应用程序数据。

因此,当这些信息绝对重要时,我会将其保存到单独的数据库中,而不是应用程序数据中。

于 2012-07-24T07:14:30.870 回答