Tridion 如何使用C#TBB从content manager发布图像文件夹?

Tridion 如何使用C#TBB从content manager发布图像文件夹?,tridion,Tridion,我想将我的所有图像从content manager中的一个文件夹移动到服务器上的一个文件夹,如何使用C#TBB 在SDL Tridion World上,您可以找到一组有用的模板构建块,其中包含解决方案: 请参阅#5:获取CSS图像-在特定CMS文件夹中发布所有图像 下面是从该解决方案中截取的一段代码,只是为了了解它是如何完成的 过滤器过滤器=新过滤器(); filter.Conditions[“ItemType”]=ItemType.Component; filter.Conditions[“R

我想将我的所有图像从content manager中的一个文件夹移动到服务器上的一个文件夹,如何使用C#TBB

在SDL Tridion World上,您可以找到一组有用的模板构建块,其中包含解决方案:

请参阅#5:获取CSS图像-在特定CMS文件夹中发布所有图像

下面是从该解决方案中截取的一段代码,只是为了了解它是如何完成的

过滤器过滤器=新过滤器();
filter.Conditions[“ItemType”]=ItemType.Component;
filter.Conditions[“Recursive”]=false;
foreach(folder.GetItems(过滤器)中的组件img)
{
if(img.ComponentType==ComponentType.Multimedia)
{
字符串文件名=Utilities.GetFilename(img.BinaryContent.filename);
Item=package.GetByName(文件名);
bool-push=true;
如果(项!=null)
{
Debug(“包中存在同名的项”);
KeyValuePair=新的KeyValuePair(“TCMURI”,img.Id.ToString());
if(item.Properties.Contains(对))
{
Debug(“包中存在具有相同uri的项,我们不会将其推送到包中两次。”);
推送=假;
}
}
如果(推送)
{
Debug(String.Format(“将项{0}推送到包中”,filename));
package.PushItem(文件名,package.CreateMultimediaItem(img.Id));
}
}
}
您也可以调用AddBinary并指定要发布的结构组,而不是将项目推入包中并允许通过默认的完成操作发布它

Engine.PublishingContext.renderItem.AddBinary(img,structureGroup);

有关更多详细信息,请参阅TOM.NET API文档。

有几种方法可以实现此目的:

1) 静态发布,即创建结构组(即将在服务器上创建的文件夹)并在其中创建页面。您的页面将需要一个元数据模式,该模式采用多值多媒体组件链接,以便您可以将图像添加到页面的元数据中。您需要为此页面构建一个页面模板,该模板将具有一个TBB,该TBB从页面元数据中获取多媒体组件,并使用Engine.AddBinary方法将图像添加到包中并与页面一起发布(页面输出可以是一些虚拟内容)。请注意,如果您有大量图像,则会对性能产生影响


2) 动态发布:如果您有代理,则可以配置文件系统发布。然后创建链接到图像架构的动态组件模板。在内部,对给定的MM组件使用engine.AddBinary方法的TBB将图像发布到给定的结构组,作为动态组件演示。

为什么不直接从Web GUI执行此操作?是的,它正在发布,但我想要一个c代码,它允许我发布我在内容中添加到图像文件夹中的任何图像manager@FrankvanPuffelenWEB GUI在添加到文件夹时不会发布任何图像。我无法下载它…下载它有什么问题,它应该对每个人都可用?可能是我的组织中存在漏洞。它与SDL集成了吗?下载是一个zip文件,里面有完整的c#解决方案,听起来像是防火墙试图阻止你下载有用的代码。我会用一段代码来更新答案,解释基本原理,但你会从整个解决方案中受益。我正在使用这段代码,但我想访问图像文件夹中的所有项目并将它们推送到服务器,你能帮我吗。我想访问任何文件夹的所有项目,你能给我一个片段吗?我已经使用默认的多媒体模式添加了图像,如果我写了一个TBB,那么我如何从中呈现图像?你能告诉我呈现元数据模式字段的代码吗?对不起,我没有时间给你编码。您最好的选择是查看Bart建议作为示例的TBB中的代码。要从元数据模式中获取字段,请使用ItemFields API(请参阅Tridion文档)。这里不需要渲染任何内容。一旦掌握了图像组件,只需使用engine.addBinary,就可以查看TBB中名为get Linked Components的代码,该代码的扩展名与Bart建议的相同。它在底部提供了一个很好的AddBinary示例。