我在 tridion 中有一些组件项,它们是为特定模式设置的。我希望能够将这些项目的架构更改为更新的架构。新模式保留了旧模式的所有现有属性,因此不会丢失数据。在这种情况下,不可能只更改现有模式。
有谁知道是否可以这样做?
您可以通过为组件的 Schema 属性分配一个新值并保存它来更改组件的架构。当然,保存组件需要组件针对新模式进行验证。
最简单的情况是您刚刚复制粘贴了架构,因此两个架构是相同的。在实践中,您通常有更改架构的理由,在这种情况下,您可能希望在组件上使用 GetXml() 和 UpdateXml(),并让 XSLT 将 XML 转换为符合新架构的内容。在这种情况下,您可以简单地更新 XSLT 中的模式引用。
正如 Jonathon 所说,您可以为此使用自定义页面,但请记住,通常这是由程序员和管理员设计/执行的一次性操作,因此如果您使用自定义页面,您可能想要删除之后。
Tridion GUI 不允许您更改组件上的模式是有原因的:即使两个模式有一些共同的字段,您的组件很可能在这样的更改后会丢失其内容。为避免这种情况,请确保模式具有相同的目标命名空间。在这种情况下,如果在两个模式中都定义了一个字段,那么即使模式已更改,组件也将保留其值。
Tridion Content Porter 允许您将内容和模式从一个 CMS 导出到另一个。它还可用于在出版物之间移动项目。这是“复制”模式及其内容以供重复使用的一种选择(以及在更改实时数据之前备份任何工作!)。
请注意不要更改名称空间或您想保留的任何 XML 字段(尽管描述和模式名称都可以)。可以肯定的是,特别是对于实时数据,请在使用任何这些答案之前进行干净的导出以防万一。
无法通过 Content Manager 界面更改 Tridion 组件的架构。但是,这可以使用“自定义页面”来实现,因为 API 允许通过代码更改组件的架构。
取自 SDL Tridion 2009 文档(模板实施手册 (TOM.NET) 2009):
Tridion 开发者论坛 (TOPIC_ID=2899) 上有一个关于此的项目(包括代码示例)。但是,由于这是一个封闭的论坛,我不确定在此处复制代码的合法性。
我可以通过编写一些查询来直接在 tridion 数据库中替换模式名称和引用来做到这一点。它工作得很好,但我只会在起始模式与结束模式完全一样的情况下推荐这个。否则会破坏组件。