【问题标题】:How to get all media items in sitecore?如何获取sitecore中的所有媒体项目?
【发布时间】:2012-04-12 11:50:23
【问题描述】:

我正在向站点核心添加一个管道。我要做的是获取所有媒体项目,并更改 url,因为我们会将所有媒体资产放入 CDN。而且,问题很简单,如何获取所有媒体项?有人知道吗?

【问题讨论】:

  • 我不明白您为什么要尝试获取管道中的所有媒体项?为什么不让管道处理器更改所请求给定项目的 URL?
  • 感谢您的提示,我真的应该这样做。最终目标是能够通过在图像基础模板中添加复选框字段来切换媒体项的 url。问题是如何更改媒体项的 url。
  • 我之前回答过一个类似的问题:stackoverflow.com/questions/5977809/…

标签: sitecore sitecore6 sitecore-media-library


【解决方案1】:

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

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

【讨论】:

  • 谢谢!但是没有表示媒体项的url的字段,也没有媒体项的url使用的模板。
  • 顺便说一下,获取媒体库根目录的更简洁方法是 Sitecore.ItemIDs.MediaLibraryRoot
【解决方案2】:

您无法遍历 Sitecore 媒体库树并更改项目的 URL。主要原因是MediaItem(或任何Item)没有URL 的属性。指向项目的 URL 由许多配置设置(项目所在的站点、链接前缀、当前语言、“文件”扩展名等)确定。

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

  • Sitecore.Links.LinkManager.GetItemUrl()
  • Sitecore.Resources.Media.MediaManager.GetMediaUrl()

你可以做一些狐步舞建议的事情。本质上,将您自己的字段添加到每个 MediaItem 中,该字段将 URL 存储到 CDN 上的项目。您需要手动或以编程方式为每个媒体项目设置自定义 URL 字段的值。然后,在渲染时间,您将使用该字段值而不是调用MediaManager

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

【讨论】:

    猜你喜欢
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多