2012-08-03 5 views
5

Modus der Veröffentlichung - staticBilder werden immer mit TCM-ID veröffentlicht mit dem Bildnamen angehängt

Ich versuche Bilder zu veröffentlichen, aber das Problem ist, wenn ich diese Bilder, deren TCM URI veröffentlichen auf ihren Namen angehängt (dh wenn der Bildname example ist und sein TCM URI wie tcm:1-115 ist, wird der Bilddateiname example_tcm1-115).

Ich habe den folgenden Code geschrieben:

public void Transform(Engine engine, Package package) 
{ 
    Filter MMCompFilter = new Filter(); 
    MMCompFilter.Conditions["ItemType"] = Tridion.ContentManager.ItemType.Component; 
    Folder folder = engine.GetObject("tcm:1-1-2") as Folder; 

    foreach (Component MMcomp in folder.GetItems(MMCompFilter)) 
    { 
     Binary binary = engine.PublishingContext.RenderedItem.AddBinary(MMcomp); 
     String binaryurl = binary.Url; 
     char[] array = binaryurl.ToCharArray(); 
     Array.Reverse(array); 
     string obj = new string(array); 
     string final = newImagepath(obj); 
     char[] array2 = final.ToCharArray(); 
     Array.Reverse(array2); 
     string obj2 = new string(array2); 

     package.PushItem("Image", package.CreateHtmlItem(obj2)); 
    } 

    public string newImagepath(string filePath) 
    { 
     int formatIndex =filePath.IndexOf("."); 
     string format= filePath.Substring(0,formatIndex); 
     int finalPath=filePath.IndexOf("_"); 
     string newPath=filePath.Substring((finalPath+1)); 
     return (format+"."+newPath); 
    } 
} 

Ich möchte Bilder ohne die TCM-URI angehängt veröffentlichen. Plz schlagen vor, wie es getan werden kann.

Antwort

5

Einfachste ist immer am besten.

In Ihrem TBB, drücken Sie einfach die einzelnen Bilder auf der Verpackung:

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

dann die „PublishBinariesInPackage“ TBB verwenden, um diese Bilder zu Ihrem Präsentationsserver zu veröffentlichen.

7

Chris Summers hat einen sehr schönen Artikel zu diesem Thema sehr http://www.urbancherry.net/blogengine/post/2010/02/09/Unique-binary-filenames-for-SDL-Tridion-Multimedia-Components.aspx

Es ist im Grunde eine sehr einfache Sache zu beheben, aber können große Folgen haben, die Sie sollten sich bewusst sein!

Sie können nur eine Binärdatei mit einem bestimmten Dateinamen an einem einzigen Speicherort veröffentlichen (und eine Binärdatei kann nur an einem einzigen Speicherort auf dem Präsentationsserver veröffentlicht werden, sofern Sie sie nicht als Variante veröffentlichen). Im CMS ist es jedoch sehr einfach, Multimedia-Komponenten mit demselben binären Dateinamen in verschiedenen Ordnern zu erstellen, die, wenn sie an denselben Speicherort veröffentlicht werden, in Konflikt stehen. Aus diesem Grund hängt SDL Tridion standardmäßig den TCM-URI an den Dateinamen an, um ihn eindeutig zu machen.

+1

Dank Bart, oben Blog war wirklich informativ ..! – user1573378

3

Sie können die RenderedItem.AddBinary-Methode für dieses Ziel verwenden. Einige der überladenen Versionen der Methode ermöglichen es, ein Bild als Stream zu veröffentlichen und einen beliebigen Dateinamen zu übergeben. Zum Beispiel:

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

Wenn Sie diese Methode verwenden, könnte es sich lohnen, eine eigene Version von "Binary Items aus dem Paket veröffentlichen" (vielleicht: Binäre Varianten aus Paket veröffentlichen) zu erstellen. Auf diese Weise behalten Sie die Aufteilung in "Add binary" Pakete "und" Veröffentlichen von Binärdateien aus dem Paket ", die die Standard-TBBs verwenden. –