我正在使用 SDL Tridion 2011 SP1。我有组件 A、B 和 C。组件 C 与 A 和 B 链接。
如果我发布 C,则组件 A 和 B 都将被发布。但我只想发布组件 A。
任何人都可以解释如何将组件 B 排除在发布之外吗?
我正在使用 SDL Tridion 2011 SP1。我有组件 A、B 和 C。组件 C 与 A 和 B 链接。
如果我发布 C,则组件 A 和 B 都将被发布。但我只想发布组件 A。
任何人都可以解释如何将组件 B 排除在发布之外吗?
您遇到的是 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 的集合。这是即将发布的项目列表,除非您对其进行更改。
您可以遍历此列表并根据您的要求删除项目。
到目前为止,我知道没有简单的方法可以做到这一点。当您发布一个项目时,Tridion 会解析所有相关和链接的项目并发布它们。
您可以使用事件系统或自定义解析器来满足您的要求。此链接可能会有所帮助: http: //nunolinhares.blogspot.com/2011/10/tridion-publisher-and-custom-resolvers.html
如果您从 API 发布,您可以设置toIncludeComponentLinks
的属性,或者,正如 Bappi 指出的那样,在事件处理程序中执行此操作ResolveInstruction
false