Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tridion 正在发布带有TCM id和图像名称的图像_Tridion_Tridion 2011 - Fatal编程技术网

Tridion 正在发布带有TCM id和图像名称的图像

Tridion 正在发布带有TCM id和图像名称的图像,tridion,tridion-2011,Tridion,Tridion 2011,出版模式-静态 我正试图发布图像,但问题是每当我发布这些图像时,它们的TCM URI都会附加到它们的名称后面(即,如果图像名称是example,其TCM URI类似于TCM:1-115,图像文件名就会变成example\u tcm1-115) 我编写了以下代码: public void转换(引擎、包) { 过滤器MMCompFilter=新过滤器(); MMCompFilter.Conditions[“ItemType”]=Tridion.ContentManager.ItemType.Comp

出版模式-静态

我正试图发布图像,但问题是每当我发布这些图像时,它们的TCM URI都会附加到它们的名称后面(即,如果图像名称是
example
,其TCM URI类似于
TCM:1-115
,图像文件名就会变成
example\u tcm1-115

我编写了以下代码:

public void转换(引擎、包)
{
过滤器MMCompFilter=新过滤器();
MMCompFilter.Conditions[“ItemType”]=Tridion.ContentManager.ItemType.Component;
Folder Folder=engine.GetObject(“tcm:1-1-2”)作为文件夹;
foreach(文件夹中的组件MMcomp.GetItems(MMCompFilter))
{
二进制=engine.PublishingContext.renderItem.AddBinary(MMcomp);
字符串binaryurl=binary.Url;
char[]数组=binaryurl.ToCharArray();
数组。反向(数组);
字符串obj=新字符串(数组);
字符串final=newImagepath(obj);
char[]array2=final.ToCharArray();
数组。反向(array2);
字符串obj2=新字符串(array2);
package.PushItem(“Image”,package.CreateHtmlItem(obj2));
}
公共字符串newImagepath(字符串文件路径)
{
int formatIndex=filePath.IndexOf(“.”);
字符串格式=filePath.Substring(0,formatIndex);
int finalPath=filePath.IndexOf(“”);
字符串newPath=filePath.Substring((finalPath+1));
返回(格式+“+”新路径);
}
}

我想发布没有附加TCM URI的图像。请提出建议。克里斯·萨默斯就这个话题写了一篇很好的文章

这基本上是一件非常简单的事情来修复,但可能会产生巨大的后果,你应该意识到


您只能在单个位置发布一次具有特定文件名的二进制文件(并且二进制文件只能发布到演示服务器上的单个位置,除非您将其作为变体发布)。然而,在CMS中,很容易在不同的文件夹中创建具有相同二进制文件名的多媒体组件,如果它们发布到相同的位置,则会发生冲突。这就是为什么默认情况下SDL Tridion会将TCM URI附加到文件名以使其唯一。

您可以使用renderItem.AddBinary方法实现此目标。该方法的一些重载版本允许将图像发布为流,并传递任何文件名。例如:

public Binary AddBinary(
    Stream content,
    string filename,
    string variantId,
    string mimeType
)

最简单的总是最好的

在TBB中,只需将单个图像推送到软件包:

package.PushItem(package.CreateMultimediaItem(component.Id));

然后使用“PublishBinariesInPackage”TBB将这些图像发布到演示服务器。

如果要使用此方法,可能需要考虑创建自己版本的“从包发布二进制项目”(可能称为:从包发布二进制变体”)。这样,您仍然可以在“将二进制添加到包”中保留拆分和默认TBB使用的“从包发布二进制文件”。