我想将我的所有图像从内容管理器中的文件夹之一移动到服务器上的文件夹之一,如何使用 C# TBB 来做到这一点?
2 回答
在 SDL Tridion World 上,您可以找到一组有用的模板构建块,其中包含解决方案:http ://sdltridionworld.com/community/extension_overview/useful_tbbs.aspx
请参阅 #5:获取 CSS 图像 - 发布特定 CMS 文件夹中的所有图像。
这是该解决方案的代码片段,只是为了了解它是如何完成的。
Filter filter = new Filter();
filter.Conditions["ItemType"] = ItemType.Component;
filter.Conditions["Recursive"] = false;
foreach (Component img in folder.GetItems(filter))
{
if (img.ComponentType == ComponentType.Multimedia)
{
string filename = Utilities.GetFilename(img.BinaryContent.Filename);
Item item = package.GetByName(filename);
bool push = true;
if (item != null)
{
Logger.Debug("An item with the same name exists in the package");
KeyValuePair<string, string> pair = new KeyValuePair<string,string>("TCMURI", img.Id.ToString());
if (item.Properties.Contains(pair))
{
Logger.Debug("An item with the same uri exists in the package, we will not push it twice to the package.");
push = false;
}
}
if(push)
{
Logger.Debug(String.Format("Pushing item {0} to the package", filename));
package.PushItem(filename, package.CreateMultimediaItem(img.Id));
}
}
}
您也可以调用 AddBinary 并指定您希望它也发布的结构组,而不是将项目推入包中并允许它通过默认完成操作发布。
Engine.PublishingContext.RenderedItem.AddBinary(img, structureGroup);
有关更多详细信息,请参阅 TOM.NET API 文档。
有几种方法可以做到这一点:
1)静态发布,即创建一个结构组(即服务器上将创建的文件夹)并在里面创建一个页面。您的页面将需要一个元数据模式,该模式采用多阀多媒体组件链接,以便您可以将图像添加到页面的元数据中。您需要为此页面构建一个页面模板,该模板将具有一个 TBB,它从页面元数据中获取多媒体组件并使用 Engine.AddBinary 方法将图像添加到包中并与页面一起发布(页面输出可以是一些虚拟的东西)。请注意,如果您有很多图像,则会对性能产生影响。
2)动态发布:如果有broker,可以配置文件系统发布。然后创建一个链接到您的图像架构的动态组件模板。在内部使用带有 engine.AddBinary 方法的 TBB 给给定的 MM 组件将图像发布到给定的结构组作为动态组件表示。