我正在使用 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
}
}
}
上面的代码示例演示了您可以访问名为 solveItems 的集合。这是将要发布的项目列表,除非您对其进行了更改。
您可以循环访问此列表并根据需要删除项目。
到目前为止,我知道没有简单的方法可以做到这一点。当您发布一个项目时,Tridion 会解析所有相关项目和链接项目并发布它们。
您可以使用事件系统或自定义解析程序来实现您所要求的需求。此链接可能会有所帮助:http://nunolinhares.blogspot.com/2011/10/tridion-publisher-and-custom-resolvers.html
如果您从 API 发布,您可以将 ResolveInstruction
的属性设置为 false
IncludeComponentLinks
,或者,正如 Bappi 指出的那样,在事件处理程序中执行此操作