2012-08-03 3 views
5

Modo de la edición - estáticaser publicado con id TCM anexa con el nombre de la imagen

que estoy tratando de publicar las imágenes, pero el problema es cada vez publico esas imágenes, su URI de la medicina tradicional china se anexa a su nombre (es decir, si el nombre de la imagen es example y su URI de TCM es como tcm:1-115, la imagen del nombre del archivo se convierte en example_tcm1-115).

He escrito el siguiente código:

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); 
    } 
} 

quiero publicar las imágenes sin el TCM URI anexado a él. Por favor sugiero cómo se puede hacer.

Respuesta

5

El más simple es siempre el mejor.

En su TBB, basta con pulsar las imágenes individuales para el paquete:

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

entonces utilizar "PublishBinariesInPackage" TBB publicar estas imágenes en el servidor de presentación.

7

Chris Summers escribió un artículo muy agradable en este mismo tema http://www.urbancherry.net/blogengine/post/2010/02/09/Unique-binary-filenames-for-SDL-Tridion-Multimedia-Components.aspx

Básicamente es una cosa muy simple de solucionar, pero puede tener enormes consecuencias que se debe tener en cuenta!

Solo puede publicar un binario con un cierto nombre de archivo en una sola ubicación una vez (y un binario solo se puede publicar en una única ubicación en el servidor de presentación, a menos que lo publique como una variante). Sin embargo, en el CMS es muy fácil crear Componentes Multimedia con el mismo nombre de archivo binario en diferentes carpetas, que si se publican en la misma ubicación estarán en conflicto. Es por eso que, por defecto, SDL Tridion agrega el URI TCM al nombre del archivo para hacerlo único.

+1

Gracias Bart, por encima del blog fue muy informativo ..! – user1573378

3

Puede usar el método RenderedItem.AddBinary para este objetivo. Algunas de las versiones sobrecargadas del método permiten publicar una imagen como una secuencia y pasar cualquier nombre de archivo. Por ejemplo:

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

Si va a utilizar este método, podría valer la pena considerar crear su propia versión de "Publicar elementos binarios desde el paquete" (tal vez llamado: Publicar variantes binarias del paquete). De esta manera, aún conservará la división en "Agregar binario" empaquetar "y" Publicar binarios del paquete ", que utilizan los TBB predeterminados. –

Cuestiones relacionadas