すべての画像をコンテンツマネージャーのフォルダーの1つからサーバーのフォルダーの1つに移動したいのですが、C#TBBを使用して移動するにはどうすればよいですか?
2 に答える
SDL Tridion Worldには、そのソリューションを含む便利なテンプレートビルディングブロックのセットがあります。http://sdltridionworld.com/community/extension_overview/useful_tbbs.aspx
#5:CSSイメージの取得-すべてのイメージを特定のCMSフォルダーに公開するを参照してください。
これは、そのソリューションのコードを抜粋したもので、その方法を理解するためのものです。
Filter filter = new Filter();
filter.Conditions["ItemType"] = ItemType.Component;
filter.Conditions["Recursive"] = false;
foreach (Component img in folder.GetItems(filter))
{
if (img.ComponentType == ComponentType.Multimedia)
{
string filename = Utilities.GetFilename(img.BinaryContent.Filename);
Item item = package.GetByName(filename);
bool push = true;
if (item != null)
{
Logger.Debug("An item with the same name exists in the package");
KeyValuePair<string, string> pair = new KeyValuePair<string,string>("TCMURI", img.Id.ToString());
if (item.Properties.Contains(pair))
{
Logger.Debug("An item with the same uri exists in the package, we will not push it twice to the package.");
push = false;
}
}
if(push)
{
Logger.Debug(String.Format("Pushing item {0} to the package", filename));
package.PushItem(filename, package.CreateMultimediaItem(img.Id));
}
}
}
アイテムをパッケージにプッシュしてデフォルトの終了アクションで公開できるようにする代わりに、AddBinaryを呼び出して、公開する構造グループを指定することもできます。
Engine.PublishingContext.RenderedItem.AddBinary(img, structureGroup);
詳細については、TOM.NETAPIのドキュメントを参照してください。
これを行うことができるいくつかの方法:
1)静的公開。つまり、構造グループ(つまり、サーバー上に作成されるフォルダー)を作成し、その中にページを作成します。ページには、ページのメタデータに画像を追加できるように、マルチバルブマルチメディアコンポーネントリンクを取得するメタデータスキーマが必要です。このページのページテンプレートを作成する必要があります。このテンプレートには、ページメタデータからマルチメディアコンポーネントを取得し、Engine.AddBinaryメソッドを使用して画像をパッケージに追加し、ページとともに公開するTBBが含まれます(ページ出力はダミーのものになります)。画像が多い場合は、パフォーマンスに影響することに注意してください。
2)動的公開:ブローカーがある場合は、ファイルシステム公開を構成できます。次に、イメージスキーマにリンクされた動的コンポーネントテンプレートを作成します。内部では、特定のMMコンポーネントに対してengine.AddBinaryメソッドでTBBを使用して、動的コンポーネントプレゼンテーションとして特定の構造グループに画像を公開します。