如何在sitecore中获取媒体项目的详细信息

本文关键字:媒体 项目 详细信息 获取 sitecore | 更新日期: 2023-09-27 18:29:22

我目前正在sitecore中进行图像站点地图生成。所以我需要在一个网站的特定url中使用的所有图像。

在这里,我需要获得使用媒体项目的所有项目的详细信息。。否则,我需要找到在sitecore中的一个项目(url)中使用的所有媒体项目(图像)。

我试图从一个项目中获取图像字段,它运行良好,但我需要的是获取项目中使用的所有图像,这些图像是通过演示详细信息添加的。

 Item currentitem = master.GetItem("/sitecore/content/International/Cars/New models/All new XC90");
 public static string GetImageURL(Item currentItem)
        {
            string imageURL = string.Empty;
            Sitecore.Data.Fields.ImageField imageField = currentItem.Fields["Image"];
            if (imageField != null && imageField.MediaItem != null)
            {
                Sitecore.Data.Items.MediaItem image = new Sitecore.Data.Items.MediaItem(imageField.MediaItem);
                imageURL = Sitecore.StringUtil.EnsurePrefix('/', Sitecore.Resources.Media.MediaManager.GetMediaUrl(image));
            }
            return imageURL;
        }

如何在sitecore中获取媒体项目的详细信息

由于页面由多个组件组成,因此需要对这些组件进行迭代,检索所有数据源项并检查字段值。不要忘记,图像也可以放置在富文本字段中。

为了确保您捕捉到所有这些,您可以更好地对网站进行WebClient回调,基本上是抓取渲染的HTML,然后使用HTMLAgilityPack/FizzzlerEx/CsQuery返回所有图像。然后,如果需要,您可以只筛选到媒体库或特定位置的媒体。

using HtmlAgilityPack;
using Fizzler.Systems.HtmlAgilityPack;
//get the page
HtmlWeb web = new HtmlWeb();
HtmlDocument document = web.Load("http://example.com/requested-page");
HtmlNode page = document.DocumentNode;
//loop through all images on the page
foreach(HtmlNode item in page.QuerySelectorAll("img"))
{
    var src = item.Attributes["src"].Value;
    // do some stuff
}

如果您只想从媒体库中获取引用的图像,则可以限制查询:

foreach(HtmlNode item in page.QuerySelectorAll("img[src^='/-/media/']"))
{
    //do stuff
    ...
}
正如jammykam所指出的,一个页面可能由多个组件组成。然而,对html进行实时请求可能并不总是最佳的。

另一种解决方案可能是使用Sitecore ContentSearch。您可以创建一个存储的计算字段,该字段包含页面项目上所有图像的列表。这将在运行时更快地提取,并且您可以在索引时花费更多的CPU周期来获得准确的图像列表。

计算的索引字段可以是guid(媒体itme id)或图像url的列表,也可以是适合您需要的任何自定义格式。

在索引期间,您可以使用LinkDatabase查找引用的项目并筛选出所需的媒体项目。因此,您将获得从任何字段引用的图像,包括富格文本字段中的嵌入图像。

如前所述,您可以对项目本身和页面布局使用的引用项目执行这些操作。您可以遍历从项目中获得的项目引用列表。Visualization.GetRenderings

遍历sitecore中的所有页面是一项相当繁重的任务,还会导致获得不需要的图像,如徽标和其他标题图像。您应该考虑在页面模板上添加"Sitemap Images"树列表字段,以包含页面的所有相关图像。