サイトコアにパイプラインを追加しています。私がやろうとしているのは、すべてのメディア アイテムを取得し、URL を変更して、すべてのメディア アセットを CDN に入れることです。問題は単純です。すべてのメディア アイテムを取得するにはどうすればよいでしょうか。誰か知ってる?
2 に答える
カスタムアセンブリで、次のようにします。
Sitecore.Data.Items.Item home = db.GetItem("/sitecore/media library");
using (new Sitecore.SecurityModel.SecurityDisabler())
{
alterItem(home);
}
protected void alterItem(Sitecore.Data.Items.Item root)
{
foreach (Sitecore.Data.Items.Item itm in root.Children)
{
//follow "absolute url" example below and edit each media item as you enumerate
//Use recursion to loop through the entire tree under the root item
alterItem(itm);
}
}
Sitecore メディア ライブラリ ツリーをたどってアイテムの URL を変更することはできません。主な理由は、 a MediaItem
(またはItem
そのことについては any) に のプロパティがないことですURL
。アイテムを指す URL は、多くの構成設定 (アイテムが存在するサイト、リンクのプレフィックス、現在の言語、「ファイル」拡張子など) によって決まります。
アイテムの実際の URL を制御する要因は多数あるため、レンダリング時にアイテムの URL を取得するために利用できる方法がいくつかあります。アイテムへの URL を取得するために使用するメソッドは次のとおりです。
Sitecore.Links.LinkManager.GetItemUrl()
Sitecore.Resources.Media.MediaManager.GetMediaUrl()
foxtrotZulu が提案していることを実行できます。MediaItem
基本的に、CDN 上のアイテムへの URL を格納する独自のフィールドをそれぞれに追加します。メディア アイテムごとにカスタム URL フィールドの値を手動またはプログラムで設定する必要があります。次に、レンダリング時に、 への呼び出しではなく、そのフィールド値を使用しますMediaManager
。
の呼び出しによって返される URL を制御するために、さまざまな構成設定を活用することも検討してください。Sitecore.Resources.Media.MediaManager.GetMediaUrl()