如何获取sitecore中的所有媒体项?

如何获取sitecore中的所有媒体项?,sitecore,sitecore6,sitecore-media-library,Sitecore,Sitecore6,Sitecore Media Library,我正在向sitecore添加管道。我试图做的是获取所有媒体项目,并更改url,因为我们将把所有媒体资产放入CDN。问题很简单,如何获取所有媒体项目?有人知道吗?在自定义程序集中,执行以下操作: Sitecore.Data.Items.Item home = db.GetItem("/sitecore/media library"); using (new Sitecore.SecurityModel.SecurityDisabler()) { alterItem(home

我正在向sitecore添加管道。我试图做的是获取所有媒体项目,并更改url,因为我们将把所有媒体资产放入CDN。问题很简单,如何获取所有媒体项目?有人知道吗?

在自定义程序集中,执行以下操作:

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。主要原因是
MediaItem
(或任何
)没有
URL
的属性。指向项目的URL由许多配置设置决定(项目所在的站点、链接前缀、当前语言、“文件”扩展名等)

由于控制项目实际URL的因素很多,因此可以利用一些方法在渲染时获取项目的URL。您应该使用以下方法获取项目的URL:

  • Sitecore.Links.LinkManager.GetItemUrl()
  • Sitecore.Resources.Media.MediaManager.GetMediaUrl()
你可以做foxtrotZulu建议的事情。本质上,将您自己的字段添加到每个将URL存储到CDN上项目的
MediaItem
。您需要手动或通过编程为每个媒体项设置自定义URL字段的值。然后,在渲染时间使用该字段值,而不是调用
MediaManager


您可能还想了解如何利用各种配置设置来控制通过调用
Sitecore.Resources.Media.MediaManager.GetMediaUrl()返回的URL

我不明白您为什么要尝试获取管道中的所有媒体项?你为什么不让管道处理器更改所请求的给定项目的URL?谢谢你的提示,我真的应该这样做。最终目标是通过向图像基础模板添加复选框字段来切换媒体项的url。问题是如何更改媒体项目的url。我以前回答过类似的问题:谢谢!但是没有表示媒体项url的字段,也没有媒体项url使用的模板。请检查。顺便说一句,获取媒体库根目录的更简洁的方法是Sitecore.ItemId.MediaLibraryRoot