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

时间:2016-01-07 07:51:01

标签: c# sitecore sitemap sitecore-media-library

我目前正致力于在sitecore中生成图像站点地图。所以我需要在网站的特定网址中使用所有图片。

这里我需要获取使用媒体项目的所有项目的详细信息..或者我需要找到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;
        }

3 个答案:

答案 0 :(得分:3)

由于页面由多个组件组成,您需要遍历这些组件,检索所有数据源项并检查字段值。不要忘记,图像也可以放在富文本字段中。

为了确保您捕获所有这些内容,您可以更好地回复该网站{@ 3}},实质上是抓取呈现的HTML,然后使用WebClient返回所有图像。如果需要,您可以仅过滤媒体库或特定位置的那些。

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
    ...
}

答案 1 :(得分:1)

正如jammykam所指出的,页面可能由多个组件组成。但是,制作html的实时请求可能并不总是最佳的。

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

计算出的索引字段可以是guid列表(media itme id)或图片网址或任何适合您需要的自定义格式。

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

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

获得的项目引用列表

答案 2 :(得分:0)

遍历sitecore中的所有页面是非常繁重的任务,也会导致获得不需要的图像,如徽标,其他标题图像。您应该考虑在页面模板上添加“站点地图图像”树列表字段,以包含该页面的所有相关图像。