5

公開モード - 静的

画像を公開しようとしていますが、問題は、それらの画像を公開するたびに、名前に TCM URI が追加されることです (つまり、画像名が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はそれを行う方法を提案します。

4

3 に答える 3

7

Chris Summers は、まさにこのトピックに関する非常に優れた記事を書きましたhttp://www.urbancherry.net/blogengine/post/2010/02/09/Unique-binary-filenames-for-SDL-Tridion-Multimedia-Components.aspx

基本的には簡単に修正できますが、重大な結果を招く可能性があるため、注意が必要です。

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

于 2012-08-03T08:16:34.190 に答える
5

最も単純なものが常に最善です。

TBB で、個々のイメージをパッケージにプッシュするだけです。

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

次に、「PublishBinariesInPackage」TBB を使用して、これらのイメージをプレゼンテーション サーバーに公開します。

于 2012-08-06T08:49:13.497 に答える
3

この目標には RenderedItem.AddBinary メソッドを使用できます。メソッドのオーバーロードされたバージョンの一部では、画像をストリームとして公開し、任意のファイル名を渡すことができます。例えば:

public Binary AddBinary(
    Stream content,
    string filename,
    string variantId,
    string mimeType
)
于 2012-08-03T10:00:25.397 に答える