5

我正在使用 SDL Tridion 2011 SP1。我有组件 A、B 和 C。组件 C 与 A 和 B 链接。

如果我发布 C,则组件 A 和 B 都将被发布。但我只想发布组件 A。

任何人都可以解释如何将组件 B 排除在发布之外吗?

4

3 回答 3

10

您遇到的是 Tridion 的默认行为。这是设计使然,以确保当您更改组件中的内容时,发布它会更新网站上该内容的所有实例。

正如其他答案所暗示的,您可以使用自定义解析器更改此行为:

 using Tridion.ContentManager;
 using Tridion.ContentManager.CommunicationManagement;
 using Tridion.ContentManager.ContentManagement;
 using Tridion.ContentManager.Publishing;
 using Tridion.ContentManager.Publishing.Resolving;

public class UpdateResolvedItems : IResolver
{
      public void Resolve(
            IdentifiableObject item, 
            ResolveInstruction instruction,
            PublishContext context, 
            Tridion.Collections.ISet<ResolvedItem> resolvedItems)
      {
           foreach (ResolvedItem resolvedItem in resolvedItems)
           {
             // Check resolved items, and remove accordingly
           }
      }
}

上面的代码示例演示了您可以访问一个名为 resolvedItems 的集合。这是即将发布的项目列表,除非您对其进行更改。

您可以遍历此列表并根据您的要求删除项目。

于 2012-05-04T07:39:27.877 回答
8

到目前为止,我知道没有简单的方法可以做到这一点。当您发布一个项目时,Tridion 会解析所有相关和链接的项目并发布它们。

您可以使用事件系统或自定义解析器来满足您的要求。此链接可能会有所帮助: http: //nunolinhares.blogspot.com/2011/10/tridion-publisher-and-custom-resolvers.html

于 2012-05-04T07:22:03.550 回答
3

如果您从 API 发布,您可以设置toIncludeComponentLinks的属性,或者,正如 Bappi 指出的那样,在事件处理程序中执行此操作ResolveInstructionfalse

于 2012-05-04T07:23:34.593 回答