2012-08-03 10 views
5

モードを付加TCMのIDで公開なっています(つまり、イメージ名がexampleで、そのTCM URIがtcm:1-115の場合、イメージファイル名はexample_tcm1-115になります)。画像は出版のイメージ名

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

が、私はそれに追加TCM URIせずに画像を公開する:

私は、次のコードを書かれています。 Plzはどのようにそれを行うことができます示唆しています。

答えて

5

最も単純なものが常に最適です。あなたのTBBで

、ちょうどパッケージに個々の画像をプッシュ:

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

その後、あなたのプレゼンテーションサーバにこれらの画像を公開する「PublishBinariesInPackage」TBBを使用しています。

7

クリス・サマーズは、基本的に修正するために非常に単純なことですが、あなたが知っておくべき巨大な影響を持つことができ、この非常に話題にhttp://www.urbancherry.net/blogengine/post/2010/02/09/Unique-binary-filenames-for-SDL-Tridion-Multimedia-Components.aspx

を非常に素晴らしい記事を書きました!

特定のファイル名を持つバイナリは、一度に1箇所にしか公開できません(バイナリは、プレゼンテーションサーバー上の単一の場所にのみ公開することができます。ただし、バリアントとして公開しない限り)。しかし、CMSでは、異なるフォルダに同じバイナリファイル名を持つマルチメディアコンポーネントを作成するのは非常に簡単です。同じ場所に公開されると競合することになります。そのため、デフォルトでSDL TridionはTCM URIをファイル名に追加して固有のものにしています。

+1

ありがとうBart、ブログの上に本当に有益だった..! – user1573378

3

この目標にはRenderedItem.AddBinaryメソッドを使用できます。オーバーロードされたバージョンのメソッドでは、イメージをストリームとしてパブリッシュしてファイル名を渡すことができます。例:

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

この方法を使用する場合は、「バイナリアイテムをパブリッシュからパブリッシュする」という独自のバージョンを作成することを検討する価値があります(バイナリバリアントをパブリッシュからパブリッシュすることもできます)。 「パッケージからバイナリをパブリッシュする」というように、デフォルトのTBBが使用します。 –

関連する問題